我的数据库中有分类和子类别。数据库表包含“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']; }
}
使用此代码我只能显示主要类别。示例图片在这里:
但我想这样表现出来:
我的表格代码如下:
<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>
那么,我怎么能这样做呢?
答案 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
将所有子类别返回到一行而不是多行 - 这可能更容易实现。