首页 / AJAX / ajax商品筛选功能如何进行判断
ajax商品筛选功能如何进行判断
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ajax商品筛选功能如何进行判断,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4216字,纯文字阅读大概需要7分钟。
内容图文
![ajax商品筛选功能如何进行判断](/upload/InfoBanner/zyjiaocheng/206/c9d8270d93ab4b8f862f0469b702677e.jpg)
比如我存了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<count($peistr)-2;$i++){//把接收到的商品选项的id循环出来 foreach($darr[$peistr[$i]] as $dddkey=>$dddvalue){//把解码后的数据进行遍历,键名是接收到的商品选项的id if($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了。
内容总结
以上是互联网集市为您收集整理的ajax商品筛选功能如何进行判断全部内容,希望文章能够帮你解决ajax商品筛选功能如何进行判断所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。