如何正确加入表以显示类别,子类别和产品ID

时间:2016-07-20 18:39:55

标签: php mysqli left-join

我是编码的新手,我一直试图找出如何正确加入表格。我一直在阅读它,但由于某种原因,我的头缠绕它有点麻烦。

我设置了一个本地主机,并且一直在乱用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>

1 个答案:

答案 0 :(得分:0)

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

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