第一個項目階段接近尾聲了,分享一個關於無限分類自定義的回調函數(說實話,當時寫出來也是懵的,現在再看更懵,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
+----+-----+-------+--------------+
看著表就好多了,我的想法是如果我在下拉列表中選擇的是“所有商品”,那麼只要是屬於所有商品的所有子類都應該被我拿到(並且我還不希望拿到如上表中的“國有商品”、"進口商品",因為他們下面還有子類)。寫到這裡,我似乎覺得可以不用我這麼麻煩去寫回調了。~~~~(>_<)~~~~ 、、、、似乎,似乎、、、、算了、、、還是不要半途而廢了,花了我大半個小時才憋出這點字呢。。。∑
<?php
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;
}