[英]Categories with Subcategories in table - PHP + MYSQL
我的數據庫中有類別和子類別。 數據庫表包含“ cid”,“ pid”和“ cname”列。
Cid =類別ID
Pid =如果Category是Sub-Category,則Pid =屬於哪個類別。
Cname =類別名稱
例如,“軟件”是一個類別,ID = 15,“ IOS軟件是一個子類別,ID = 30,PID = 15”
現在,我想向您展示這只貓。 和子貓在一張桌子上。 這是我的代碼:
<?php
function categories() {
$categorysql = $DB['DB_Database']->query("SELECT cid, pid, cname FROM categories GROUP BY cid");
while ($row = $DB['DB_Database']->fetch_assoc($categorysql))
{
if ($row['pid'] > 0 {
}
else {
$catid = $row['cid'];
$catname = $row['cname']; }
}
使用此代碼,我只能顯示主要類別。 示例圖片在這里:
但我想這樣顯示:
我的表格代碼如下:
<table width="268" border="1">
<tr>
<td width="52" rowspan="2" valign="top">Image</td>
<td width="200" height="23"><a href="{$catid}">{$catname}<a></td>
</tr>
<tr>
<td height="36" valign="top">This ara for sub cat.</td>
</tr>
</table>
那么,我該怎么辦呢?
為了便於實施,您可以進行兩次查詢
這將給出所有類別。 (假設根類別pid將為0
SELECT name FROM categories where pid = 0
在那個循環中使用第二查詢
SELECT name FROM categories where pid = $catId
這是php代碼示例,用於填充您可以使用的數組
function runQuery($sql) {
global $DB; $dbResource = $DB['DB_Database']->query($sql); $rows = array(); while ($row = $DB['DB_Database']->fetch_assoc($dbResource)) { $rows[] = $row; } return $rows; } function getSubCat($pid) { subCategorySql = "SELECT name FROM categories where pid = "+ $pid; return runQuery($subCategorySql); } $categorySql = "SELECT name FROM categories where pid = 0" $categories = runQuery(categorySql) $i=0; foreach($categories as $aCat) { $categories[$i++]['sub_cat'] = getSubCat($aCat['id']); }
function runQuery($sql) { global $DB; $dbResource = $DB['DB_Database']->query($sql); $rows = array(); while ($row = $DB['DB_Database']->fetch_assoc($dbResource)) { $rows[] = $row; } return $rows; } function getSubCat($pid) { subCategorySql = "SELECT name FROM categories where pid = "+ $pid; return runQuery($subCategorySql); } $categorySql = "SELECT name FROM categories where pid = 0" $categories = runQuery(categorySql) $i=0; foreach($categories as $aCat) { $categories[$i++]['sub_cat'] = getSubCat($aCat['id']); }
現在您可以將$ categories [index] ['name']用於類別,並將$ categories [index] ['sub_cat'] [sub_cat_index] [name]用於子類別名稱。
但是,這不是一個好方法,因為它將多次訪問數據庫。
我建議更改您的php代碼,使其與以下使用OUTER JOIN
sql一起使用:
select c.cname, c2.cname subname
from categories c
left join categories c2 on c.cid = c2.pid
where c.pid is null
假設父母的pid字段為null。 或者,您可以使用GROUP_CONCAT
在一行中而不是在多行中返回所有子類別-這對於您的實現可能更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.