php ajax 商品筛选,ajax商品筛选功能如何进行判断

我把筛选商品的各个选项以json的形式存入数据库的一个字段(cp_leibie)

比如我存了3条

他们的选项就是

{"208":["209"],"5":["182"],"6":["30"],"27":["36"],"28":["34"]} 假如该条数据id为1

{"92":["201","202","204"],"93":["137","138","139"],"94":["143","144"]}假如该条数据id为2

{"208":["209"],"5":["182"],"6":["29"],"27":["35"],"28":["33"]}假如该条数据id为3

取出的时候以数组遍历

-----------------------------------------------------------------

比如商品中其中一个选项是 (适用环境: 全部 办公室 现代 欧式 )

那么$peistr是“适用环境”的id,$liestr是后面的子选项的id,

具体怎么接收的就不贴出来了,

下面for循环里为什么减二也不用考虑了。

下面是ajax提交过去的查询语句:

$strpei="select `id`,`name`,`huiyuanjia`,`cpimg`,`shichangjia`,cp_leibie from `".$db_prefix."chanpin` where `ifxianshi`=1 and `cpfl`='".$sid."' ";$dqcp = $Db->FetchAll($strpei);//这是执行sql语句的方法$strpei.="and id in(";$strpei2="";foreach($dqcp as $dkey=>$dvalue){//遍历所有商品$darr=json_decode(urldecode($dvalue['cp_leibie']),true);//把json数据进行解码for($i=0;$i$dddvalue){//把解码后的数据进行遍历,键名是接收到的商品选项的idif($liestr[$i]==$dddvalue){//子选项的id和json数据里的值一致的话,就把该条数据的id加到条件里$strpei2.=$dvalue['id'].",";}}}}$strpei.=$strpei2.")";

符合条件的就把对应的商品的id写到条件的in语法里。

假如点击了209的子项,那么id为1和3的id就会加入条件里

问题是接收第一次没问题,当接收第二次的时点击201,应该没有符合条件的数据,但是3个ID的数据他都显示了出来。

应该是循环里的if判断没有写对,不知条件该如何写。或者在其他地方入手能解决

回复讨论(解决方案)

$peistr 這個可以打印出來看看嗎?

$peistr 這個可以打印出來看看嗎?

如果选择了 209的子项

打印$peistr的结果

Array (

[0] => 208

[1] =>

[2] =>

[3] =>

[4] =>

[5] =>

[6] =>

)

打印$liestr的结果

Array (

[0] => 209

[1] =>

[2] =>

[3] =>

[4] =>

[5] =>

[6] =>

)

选择了 209的子项之后,再选择30的子项

打印$peistr的结果

Array (

[0] => 208

[1] =>

[2] => 6

[3] =>

[4] =>

[5] =>

[6] =>

)

打印$liestr的结果

Array (

[0] => 209

[1] =>

[2] => 30

[3] =>

[4] =>

[5] =>

[6] =>

)

数组里最后两个,也就是键名是5,6的,是没用的,也就是为什么在for循环里要减2。其实商品筛选里只有5个选项,下面再分子项。

按我这么来选的话符合条件的应该只有id为3的。

我上面写的这个条件

if($liestr[$i]==$dddvalue){/

$strpei2.=$dvalue['id'].",";

}

是把所有的符合条件的都算了进去

也就是208的子项,id为1也有,id为3的也有。所有他把这两个id的数据都查了出来

$peistr 這個可以打印出來看看嗎?

最后一句是“所以他把这两个id的数据都查了出来”

奇怪定位数据组织形式,奇怪的查询构造方式

奇怪定位数据组织形式,奇怪的查询构造方式

这也是一种思路。每个栏目的每个选项的个数都不一样,不能把每个都建一个字段

我想到了一个思路,就是$peistr 的数组接收第一次时,只有一个索引有值。接收第二次时,有两个索引有值。那么就可以判断第一次接收的时候,就判断这一个值。第二次接收的时候,就同时判断两个值。以此类推。但是具体怎么写还没想出来

还有一个想法是 接收第一次时,符合条件的产品的id就会加入条件里。接收第二次时,如果在原来的id里有的话,也就是增加了的话。那么就把该条ID加入条件里

我把判断改了一下if($liestr[$i]==$dddvalue){ $strpei2.=$dvalue['id'].",";}

$where.="$liestr[$i]==$dddvalue &&";if($i==(count($peistr)-2)){$where= substr($where,0,-2);}if($where){$strpei2.=$dvalue['id'].",";}

但是这样的话,$where他是一个字符串来放到if里判断的。不能进行判断处理 无论是什么$where都是1。这只是一个思路,你看看吧

我把判断改了一下if($liestr[$i]==$dddvalue){ $strpei2.=$dvalue['id'].",";}

$where.="$liestr[$i]==$dddvalue &&";if($i==(count($peistr)-2)){$where= substr($where,0,-2);}if($where){$strpei2.=$dvalue['id'].",";}

但是这样的话,$where他是一个字符串来放到if里判断的。不能进行判断处理 无论是什么$where都是1。这只是一个思路,你看看吧

没错,因为他是以字符串形式连接的,if判断字符串结果就是1。这个方法恐怕行不通

我又想到了一个方法,把子项的id放到一个字段里,用FIND_IN_SET来查询,每查询一次后面就加上 and FIND_IN_SET ,把接收到的子项id在字段里查询,这样就OK了。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值