0

我的数据库中有类别和子类别。数据库表包含 "cid" 、 "pid" 和 "cname" 列。

Cid = 类别 ID

Pid = 如果 Category 是 Sub-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']; }
  }

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

在此处输入图像描述

但我想这样展示:

在此处输入图像描述

我的表代码是这样的:

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

那么我该怎么做,知道吗?

4

2 回答 2

1

为了更容易实施,您可以进行两个查询

这将给出所有类别。(假设根类别 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']);
} 

现在您可以将 $categories[index]['name'] 用于类别,将 $categories[index] ['sub_cat'][sub_cat_index][name] 用于子类别名称。

这不是一个好方法,因为它会多次访问数据库。

于 2013-09-24T21:10:34.967 回答
0

我建议更改您的 php 代码以使用以下使用 a 的 sql OUTER JOIN

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在一行而不是多行中返回所有子类别——这对于您的实现可能更容易。

于 2013-07-27T00:17:29.753 回答