第一个项目阶段接近尾声了,分享一个关于无限分类自定义的回调函数(说实话,当时写出来也是懵的,现在再看更懵,O(∩_∩)O~)
//项目需求:想在首页做个商品搜索
//做法:写了个下拉列表,列表项就是下表中的9个categoryname.。。我想任意选择一个类别都可以一次性搜索出商品表中的该类别的商品(包括下边的子类)。
//思想过程:最开始也想,,,,where path like .%0-1%.......之类的来着,但是后来发现分页的时候遇到很大问题,因为当时我上传商品没有在有子类的id中上传商品(当循环去查询商品的时候会有空循环--当该类别还有子类的时候)。
越说越乱了,还是拿表出来直接示意吧、、、
category表数据结构示意:
+----+-----+-------+--------------+
| id | pid | path | categoryname |
+----+-----+-------+--------------+
| 1 | 0 | 0 | 所有商品 1
| 2 | 1 | 0-1 | 国产商品 2
| 4 | 2 | 0-1-2 | 国产水货 4
| 5 | 2 | 0-1-2 | 国产行货 5
| 3 | 1 | 0-1 | 进口商品 3
| 6 | 3 | 0-1-3 | 进口水货 6
| 7 | 3 | 0-1-3 | 进口行货 7
| 8 | 1 | 0-1 | 测试类 8
| 9 | 1 | 0-1 | 杂货专区 9
+----+-----+-------+--------------+
看着表就好多了,我的想法是如果我在下拉列表中选择的是“所有商品”,那么只要是属于所有商品的所有子类都应该被我拿到(并且我还不希望拿到如上表中的“国有商品”、"进口商品",因为他们下面还有子类)。写到这里,我似乎觉得可以不用我这么麻烦去写回调了。~~~~(>_
mysql_connect('localhost','root','admin');
mysql_select_db('dzshop');
mysql_query("set names utf8");
//测试
echo rtrim( list_typeid(1), ',' ); //输出 4,5,6,7,8,9 ^o^ 此时可以 select * from goods where typeid in(4,5,6,7,8,9) 拿出所有商品不是问题了。
echo rtrim( list_typeid(2), ',' ); //输出 4,5
echo rtrim( list_typeid(4), ',' ); //输出 4
/*
* 函数:list_typeid
* 功能:获取给定的类别,获取该指定typeid(即category表的id)下的所有没有子类的category.id(category.id==goods.typeid)
* $id:需要查询的id
* $category_name:分类表的表名
*/
function list_typeid($id,$category_name='category'){
$sql="select b.id,b.pid from {$category_name} a,{$category_name} b where a.id={$id} and b.pid={$id}";
$result=mysql_query($sql);
if(mysql_affected_rows()>0){ //影响行数大于0表示该分类下有子类,进去继续执行
while( $arr = mysql_fetch_assoc($result) ){
$list_id.=list_typeid($arr['id']);
}
}else{ //没有影响行,表示该子类下没有子类了,就把这个id拿出来
return $id.','; //方便SQL语句的书写 .... WHERE ID IN($id) ....
}
return $list_id;
}
已抢66574个
抢已抢37742个
抢已抢20901个
抢已抢2589个
抢已抢19139个
抢