如何正确联接表格以显示类别、子类别和产品ID


How to properly Join a table to show category, subcategory and product ID

我是编码新手,我一直在努力找出如何正确地联接表。我一直在读这篇文章,但由于某种原因,我很难理解它

我设置了一个本地主机,一直在摆弄PHP和MySQL。我一直在尝试在同一个表中创建类别和子类别。我有一张下面几行的桌子。

Table name: categories
 id
main_cat
parent_id
sub_cat_name

我一直在尝试制作一个表格,显示每个子类别及其相应的主类别和父id。我在网上做了研究,发现了JOIN表格。到目前为止,我已经能够显示子类别及其相应的主类别,但无法显示父id。父id返回null。下面是我的代码。有人能解释为什么这不起作用吗?如果这是显示数据的最佳方式。

 <table class="table table-striped">
    <thead>
      <tr>
        <th>Subcategory Name</th>
        <th>Main Category</th>
        <th>Parent ID</th>
      </tr>
    </thead>
    <tbody>
    <?php
        // connect to database
        include 'config/config.php';
        include 'config/opendb.php';
        $sql='SELECT t1.main_cat_name, t2.sub_cat_name, t3.parent_id FROM categories t1
        LEFT JOIN categories t2 ON t2.parent_id = t1.main_cat_id
        LEFT JOIN categories t3 ON t2.main_cat_id = t3.parent_id
        WHERE t2.sub_cat_name IS NOT NULL;';
        $rs=$conn->query($sql);
        $rs->data_seek(0);
        while($row = $rs->fetch_assoc())
        {
            $mainCatName = $row['main_cat_name'];
            $subCatName  = $row['sub_cat_name'];
            echo"<tr>
            <td>$subCatName</td>
            <td>$mainCatName</td>
            <td></td>
        </tr>";
        }
        $conn->close();
    ?>
    </tbody>
  </table>

根据您的问题,我知道您想要这些:

<table class="table table-striped">
<thead>
  <tr>
    <th>Subcategory Name</th>
    <th>Main Category</th>
    <th>Parent ID</th>
  </tr>
</thead>
<tbody>
<?php
    // connect to database
    include 'config/config.php';
    include 'config/opendb.php';
    $sql='SELECT main_cat AS `main_cat_name`, sub_cat_name AS `sub_cat_name`, parent_id FROM categories WHERE sub_cat_name IS NOT NULL;';
    $rs=$conn->query($sql);
    $rs->data_seek(0);
    while($row = $rs->fetch_assoc())
    {          
        echo"<tr>
        <td>$row['main_cat_name']</td>
        <td>$row['sub_cat_name']</td>
        <td>$row['parent_id']</td>
    </tr>";
    }
    $conn->close();
?>
</tbody>