表中包含子类别的类别 - PHP + MYSQL

时间:2013-07-27 00:05:26

标签: php mysql html-table categories

我的数据库中有分类和子类别。数据库表包含“cid”,“pid”和“cname”列。

Cid =类别ID

Pid =如果Category是子类别,则Pid =属于哪个类别。

Cname =类别名称

例如,软件是一个类别,id = 15,“IOS软件是一个子类别,id = 30,pid = 15

现在我要展示这只猫。和Sub-Cat在一张桌子里。这是我的代码:

   <?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']; }
  }

使用此代码我只能显示主要类别。示例图片在这里:

enter image description here

但我想这样表现出来:

enter image description here

我的表格代码如下:

<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> 

那么,我怎么能这样做呢?

2 个答案:

答案 0 :(得分:1)

为了便于实施,您可以提出两个问题

这将提供所有类别。 (假设根类别pid为0

SELECT name FROM categories where pid = 0

在该循环中使用第二个查询

SELECT name FROM categories where pid = 0

SELECT name FROM categories where pid = $catId

这是填充可以使用的数组的PHP代码示例

SELECT name FROM categories where pid = $catId

现在你可以使用$ categories [index] ['name']作为类别和$ categories [index] ['sub_cat'] [sub_cat_index] [name]作为子类别名称。

这不是一个好方法,因为它会在很多时候打到数据库。

答案 1 :(得分:0)

我建议更改您的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字段为空。或者,您可以使用GROUP_CONCAT将所有子类别返回到一行而不是多行 - 这可能更容易实现。