我遇到了子類別的麻煩。子類別MySql和php
我想用1個sql查詢我的網頁上顯示此:
- 第1類:
- 子貓1
- 子貓2
- ...
- 子貓n
- 第2類:
- 子貓1
- 子貓2
- ...
- 子貓Ñ
- 類別3:
- 子貓1
- 子貓2
- ...
- 子貓ñ
- ...
表模式:
- 類別
- ID | catname |說明
- 子類別
- ID | parent_id | catname |說明
目前我使用一個查詢的類別,並在PHP while循環小類另一個查詢,但是這給了我查詢的一個頁面上有許多
我遇到了子類別的麻煩。子類別MySql和php
我想用1個sql查詢我的網頁上顯示此:
表模式:
目前我使用一個查詢的類別,並在PHP while循環小類另一個查詢,但是這給了我查詢的一個頁面上有許多
你應該得到所有的類別和所有的子類別。這樣的事情:
$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中。這只是兩個查詢。
我們會需要以查看您的表格模式以提供適當的批評,但您可以做的是將子類別連接到一個查詢中的類別,並按類別,子類別進行排序。只要你看到一個新的類別,你就知道是時候完成當前的子類別列表並開始一個新的類別。
沒有看到的表,你可能需要的東西,如:
SELECT category.name, subcategory.name
FROM categories
LEFT JOIN subcategory
ON subcategory.category_id = category.id
ORDER BY category.name, subcategory.name
從未有任何需要兩個表的樹形結構,標準的樹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任何類別的血統。
這是一些東西,但結構已經設置好,所以改變數據庫結構在這一刻是不行的 – Bundy 2009-08-24 10:06:44
該死的,搖擺和一個小姐 – 2009-08-24 10:24:57
類似捷思銳的回答,但是從表子類別中選擇,然後加盟類:
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
<? 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>
感謝bisco,解決了你的問題 – Bundy 2009-08-24 12:24:28