簡體   English   中英

表中帶有子類別的類別-PHP + MYSQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM