求教用TP做类似淘宝那种多级筛选用if语句控制发现传一两个字段还好控制,传三个字段以上就不好控制了,筛选出来的数据就不对了。有什么好的方法吗?
程序员文章站
2022-04-26 13:37:10
...
//多级筛选 $name=$_GET[pid]; $brand=$_GET[theme]; $carage=$_GET[price]; echo $carage; if($name="泵车" AND $brand="三一"){ $handmebuyinfo=M("handmebuyinfo"); $map['name']=$name; $map['brand']=$brand; //$map['carage']=$carage; $row=$handmebuyinfo->where($map)->select(); dump($row); } if($name=='' OR $brand=='' OR $carage==''){ $handmebuyinfo=M("handmebuyinfo"); $map['name']=$name; $map['brand']=$brand; $map['carage']=$carage; $map['_logic'] = 'OR'; $row=$handmebuyinfo->where($map)->select(); dump($row); }
回复讨论(解决方案)
你的这种筛选是 与(and)关系
如果组内有多选的话,那么组内才是 或(or)关系,比如同时选中 泵车 和 搅拌车
不过你目前并无此需求
你使用了 ORM,所以拼装工作是由 ORM 完成的
你只需要保证不向其传递空参数就可以 $_GET = array_diff($_GET, array(''));
最好传入的变量名与对应字段同名,这样就不需要编程对应数据了
好像 TP 用个名称映射功能,可以用一下
你的这种筛选是 与(and)关系
如果组内有多选的话,那么组内才是 或(or)关系,比如同时选中 泵车 和 搅拌车
不过你目前并无此需求
你使用了 ORM,所以拼装工作是由 ORM 完成的
你只需要保证不向其传递空参数就可以 $_GET = array_diff($_GET, array(''));
最好传入的变量名与对应字段同名,这样就不需要编程对应数据了
好像 TP 用个名称映射功能,可以用一下
$a = array( 'a' => 1, 'b' => '', 'c' => 0,);print_r(array_diff($a, array('')));print_r(array_diff($a, array('', 0)));
Array( [a] => 1 [c] => 0)Array( [a] => 1)这样就不需要 if($name=='') 这样一个个判断了
$a = array( 'a' => 1, 'b' => '', 'c' => 0,);print_r(array_diff($a, array('')));print_r(array_diff($a, array('', 0)));
Array( [a] => 1 [c] => 0)Array( [a] => 1)这样就不需要 if($name=='') 这样一个个判断了 总算搞出来了,一开始用
//$map['name']='Null';
//$map['brand']=$map[brand];
//$map['carage']=$map[carage];
$row=$handmebuyinfo->where($map)->select();
dump($row);快捷查询查询不出数据,原来是这里面值不允许为空,所以去掉这些直接赋值查询就没问题了。