2009-08-24 72 views
4

我遇到了子類別的麻煩。子類別MySql和php

我想用1個sql查詢我的網頁上顯示此:

  • 第1類:
    • 子貓1
    • 子貓2
    • ...
    • 子貓n
  • 第2類:
    • 子貓1
    • 子貓2
    • ...
    • 子貓Ñ
  • 類別3:
    • 子貓1
    • 子貓2
    • ...
    • 子貓ñ
  • ...

表模式:

  • 類別
    • ID | catname |說明
  • 子類別
    • ID | parent_id | catname |說明

目前我使用一個查詢的類別,並在PHP while循環小類另一個查詢,但是這給了我查詢的一個頁面上有許多

回答

1

你應該得到所有的類別和所有的子類別。這樣的事情:

$sql = ' 
    SELECT * FROM categories ORDER BY id ASC 
'; 
$result = mysql_query($sql); 

$categories = array(); 

while ($row = mysql_fetch_array($result)) { 
    $categories[$row['id']] = $row; 
} 

// get the subcategories 
$sql = ' 
    SELECT * FROM subcategories ORDER BY id ASC 
'; 
$result = mysql_query($sql); 

while ($row = mysql_fetch_array($result)) { 
    $categories[$row['parent_id']]['subcategories'][] = $row; 
} 

print_r($categories); 

這將把他們放在一個很好的數組結構,你可以做任何你想在PHP中。這只是兩個查詢。

+0

感謝bisco,解決了你的問題 – Bundy 2009-08-24 12:24:28

0

我們會需要以查看您的表格模式以提供適當的批評,但您可以做的是將子類別連接到一個查詢中的類別,並按類別,子類別進行排序。只要你看到一個新的類別,你就知道是時候完成當前的子類別列表並開始一個新的類別。

0

沒有看到的表,你可能需要的東西,如:

SELECT category.name, subcategory.name 
FROM categories 
LEFT JOIN subcategory 
    ON subcategory.category_id = category.id 
ORDER BY category.name, subcategory.name 
+0

這只是給了我每個類別的第一子類別。 你將如何在PHP中做到這一點? – Bundy 2009-08-24 10:03:53

+0

按字符串值排序通常不是個好主意。 – bisko 2009-08-24 10:15:16

+0

@bisko:我絕對同意。鑑於這個問題,我認爲最好給出最短的,但仍然可用的答案,而不是進入所需的更改... – Zed 2009-08-24 10:33:56

1

從未有任何需要兩個表的樹形結構,標準的樹ING表模式可能是:

categories 
id | catname | description | parent | lineage 

沿襲將包含回到根類別的路徑,例如「0,2,5,6」父將包含6

那麼對於你的問題,你可以選擇所有從表ORDER BY長度(血統)ASC

您從DB你索引他們有你的結果集後通過他們的ID

$categories = array(); 
while($row = mysql_fetch_assoc($result)){ 
    $categories[$row['id']] = $row; 
} 

現在當你通過他們循環在你的HTML,你可以檢查,看看是否當前類別具有子類別。

譜系是用來尋找屬於某一類別的後裔所有類別:

SELECT * FROM categories WHERE lineage REGEXP '[[:<:]]5[[:>:]]' 

這會得到與5任何類別的血統。

+0

這是一些東西,但結構已經設置好,所以改變數據庫結構在這一刻是不行的 – Bundy 2009-08-24 10:06:44

+0

該死的,搖擺和一個小姐 – 2009-08-24 10:24:57

0

類似捷思銳的回答,但是從表子類別中選擇,然後加盟類:

SELECT categories.name, subcategory.name 
FROM subcategory 
JOIN categories 
    ON category.id = subcategory.category_id 
ORDER BY category.id, subcategory.id 

這將返回值對像(1類,分貓1),(1類,分貓2) ......爲了進一步列將它們添加到報表,並作出別名在適當的時候像

SELECT categories.name AS maincat_name, 
    subcategory.name AS subcat_name, subcategory.id AS subcat_id 
1
<? include('qry/viewJobs_qry.php'); ?> 
<table width="900" class="tableFontSize"> 
    <TR> 
     <TD> 

      </a>Category 
     </TD> 
    </TR> 
    </table> 
    <?php 
    if(!empty($viewJobs)) { 

    while($dataJobs=mysql_fetch_array($viewJobs)) { 

    $category = $dataJobs[jobNumber]; 

    ?> 
    <script language="javascript"> 
    function toggle<? echo $category; ?>() { 
    var category = "<? echo $category; ?>"; 
    var ele = document.getElementById(category); 
    var text = document.getElementById("displayText"); 
if(ele.style.display == "block") { 
     ele.style.display = "none"; 

} 
else { 
    ele.style.display = "block"; 

} 
    } 
     </script> 
    <table width="900" class="tableFontSize"> 
    <TR> 
     <TD> 

      <a id="displayText" href=javascript:toggle<? echo $category; ?>();>+ </a><? echo $category; ?> 
     </TD> 
    </TR> 
    <TR> 
     <TD> 
      <span id="<? echo $jobNumber; ?>" style="display: none;"><div id="width900"><? include('subCategoryArray.php'); ?> </div></span> 
     </TD> 
    </TR> 
      </table> 

      <? }} ?> 

      </table>