2013-08-29 67 views
1

我有一個名爲菜單與列(sequence, page_seq, name, parent_id)顯示MySQL的行組合在一起

sequencepage_seq無關表

parent_id空白行都是頂級菜單項,然後行與parent_id不是空白的子菜單項

因此,可以說,有一排名稱Top Itemparent_id空白,序列1和另一列名爲Sub 1parent_id of 1所以當你將鼠標懸停在Top Item上時,你會將Sub 1作爲子菜單項。

我想在後臺管理面板中顯示這些組。所以,會出現與它下面像其子鏈接頂部菜單項.​​..

Top Item 1 
- Sub 1 
- Sub 2 

Top Item 2 
- Sub 3 
- Sub 4 

等等...

這裏是PHP我到目前爲止:

<table border="0" cellpadding="5" cellspacing="5"> 
    <tr> 
     <td><strong>Name</strong></td> 
    </tr> 
    <?php 
    $sql=" SELECT * FROM menu where parent_id = '' "; 
    $rs=mysql_query($sql,$conn) or die(mysql_error()); 
    while($result=mysql_fetch_array($rs)) 
    { 
     echo '<tr> 
     <td>'.$result["name"].'</td> 
     </tr>'; 
     $sql2="SELECT * from menu where parent_id != '' "; 
     $rs2=mysql_query($sql2,$conn) or die(mysql_error()); 
     while($result2=mysql_fetch_array($rs2)) 
     { 
      echo '<tr> 
      <td><dir>'.$result2["name"].'</dir></td> 
      </tr>'; 
     } 
} 
?> 
</table> 

但它顯示頂部菜單項目與每個下面的每個子菜單項目。

任何想法我可以如何實現這一目標?

回答

1

確保在$ SQL2您選擇所有的孩子在家長的是,您目前在?:

$sql2= 'SELECT * from menu where parent_id = "'.$result['sequence'].'"'; 
0

確定頂部的菜單項的序列(= ID),看來你使用相同的表來存儲父母和孩子。
父母由parent_id爲空來定義。
孩子是由parent_id不是空白​​定義的。
我不知道孩子和父母是如何聯繫的。

您的第一個查詢設置了一個循環並獲取父項。對於每個循環,您需要另一個循環來顯示該父項的所有子項。
你需要在第二循環中,其母公司目前在比賽從第一圈就知道這孩子的,以顯示定義:

$sql2="SELECT * from menu where parent_id != '' AND name = $result['XX']" 

哪裏$result['XX']是從第一回路的電流父母是什麼鏈接父對於孩子,但我不知道你用什麼來確定父母與哪些孩子有關 - 姓名?

建議/信息 你沒有檢查(也許你做,而不是簡單的例子)。如果兩個查詢都找不到,會發生什麼或者如果第一個循環找到父項,第二個循環找不到子項?
你需要檢查的東西,確保你有數據,結果等,否則你可能會結束空白的菜單項,或更糟。

看起來你可以用兩張桌子來改善這種情況,一張是所有的父母,一張是所有的孩子。用childs表中使用的父表的一些獨特參考作爲父母和孩子之間的鏈接。
所以,你可以更新,並選擇一些孩子的對於給定的父母,或者找到一個給定的孩子家長,等

,或者至少,如果你還在用一個表,嚴格具有列定義的父母和孩子的那確定他們。即type = parent,type = child。這將消除可能的問題,根據它沒有任何作用確定某個角色(即parent_id =空)。

與往常一樣,沒有必要更適合您的確切要求,並且爲什麼它是一個建議/信息:)