我在列出类别和子类别时遇到问题

时间:2020-03-28 11:47:04

标签: php mysql

我列出类别时,我尝试将子类别添加到主要类别旁边。

例如,我尝试使其类似于Opencart中的类别列表 管理面板。

我在数据库中的表如下

table:
id      - parent_id         - title             - description
1       -  0                -  Desktops         - bla bla...
2       -  0                -  Laptops          - bla bla...
3       -  1                -  Mac              - bla bla...
4       -  1                -  PC               - bla bla...
5       -  2                -  Notebooks        - bla bla...
6       -  5                -  Macs             - bla bla...
7       -  6                -  Windows          - bla bla...

我想要这样的类别输出

Desktops        
Desktops  >  Mac        
Desktops  >  PC     
Laptops & Notebooks     
Laptops & Notebooks  >  Macs        
Laptops & Notebooks  >  Windows

http://prntscr.com/rob2fz

这是我的代码方面

<?php
$cat1 = $db->query('SELECT * FROM `category` ORDER BY id DESC');
   foreach ($cat1 as $v) {
  $cat2 = $db->query('SELECT * FROM `category` WHERE parent_id = '.$v['id'].' ORDER BY id DESC';
  foreach ($cat2 as $vl) {
?>
    <tr>
        <td width="20"><?php echo $vl['id']; ?> </td>
        <td><?php echo $vl['title']; ?> > <?php echo $v['title']; ?> </td>
    </tr>
    <td class="text-center">
        <a href="#<?php echo $v1['id']; ?>" class="btn btn-primary btn-sm"> Edit</a>
    </td>  
<?php
    }
}
?>

1 个答案:

答案 0 :(得分:0)

首先,您可能希望更改列parent_id并用NULL替换零,这样就可以将该列用作外键,以确保您从未拥有parent_id什么都没有引用。

然后您可以使用此查询:

SELECT c.title, p.title as parent_title, c.description, p.description as parent_description
FROM category c 
JOIN category p ON c.id = c2.parent_id
ORDER BY p.title, c.title

这样,您可以在单个查询中获取类别和父级的信息。但是请注意,如果您的父母也有父母,则此代码将不再起作用。