PHP 购物车 - 类别页面未按预期工作

问题描述 投票:0回答:1

我有2张桌子

产品products

和类别
categories
(CatParentId 0 是父类别)。

我想要实现的是,当用户单击父类别时,它应该获取该类别中列出的产品及其子类别产品,如果用户单击任何子类别,它应该只获取这些产品儿童类别中列出的产品。

这是我迄今为止使用过的完整代码,但没有成功:

<section class="col-lg-9 col-md-9 col-sm-9">
    <?php
    $catId = $catName = $n = "";
    $id = 0;
    require_once 'Classes/class.Validation.php';
    $validate = new Validation();
    if ( isset( $_GET['name'] ) && $_GET['name'] != "" ) {
        $catName = $_GET['name'];
        $u = "SELECT CatId, CatName, CatParentId FROM categories WHERE CatName = '".$catName."'";
        $validate->Query($u);
        if ($validate->NumRows() >= 1) {
            while ($rows = $validate->FetchAllDatas()) {
                $id = $rows['CatId'];
                $n = $rows['CatName'];
                $query = "SELECT
                              c.CatName,
                              p.ProdCode,
                              p.ProdName
                          FROM
                              products p,
                              categories c
                          WHERE
                              c.CatId = p.CatId
                              AND
                              c.CatParentId = '".$id."'";
                $validate->Query($query);
                if ($validate->NumRows() >= 1) {
                    while ($row = $validate->FetchAllDatas()) {
                        // show products here
                    }
                } else {
                    $query = "SELECT
                                  c.CatName,
                                  p.ProdCode,
                                  p.ProdName
                              FROM
                                  products p,
                                  categories c
                              WHERE
                                  c.CatParentId = p.CatId
                                  AND
                                  c.CatId = '".$id."'
                              ";
                    $validate->Query($query);
                    if ($validate->NumRows() >= 1) {
                        while ($row = $validate->FetchAllDatas()) {
                            // show products here
                        }
                    }
                }

            }
        }
    }
    ?>
</section>

我很确定我有一个逻辑错误,但我找不到它的位置。请帮助我。任何帮助将不胜感激。

更新1

我已经自己解决了。用过

INNER JOIN

这是代码 - 供将来参考:->

<section class="col-lg-9 col-md-9 col-sm-9">
    <?php
    $catId = $catName = $n = "";
    $id = 0;
    require_once 'Classes/class.Validation.php';
    $validate = new Validation('benef8w7_ecommerce');
    if ( isset( $_GET['name'] ) && $_GET['name'] != "" ) {
        $catName = $_GET['name'];
        $query = "SELECT
                      p.ProdCode,
                      p.ProdRate,
                      c1.CatId,
                      c1.CatName,
                      c2.CatParentId
                  FROM
                      categories c2
                          INNER JOIN
                              categories c1
                          ON
                              c2.CatId = c1.CatParentId
                                  INNER JOIN
                                      products p
                                  ON
                                      p.CatId = c1.CatId
                  WHERE
                      c2.CatName = '".$catName."'";
        $validate->Query($query);
        if ($validate->NumRows() >= 1) {
            while ($row = $validate->FetchAllDatas()) {
                // show all the products here for both parent and child categories.
            }
        } else {
            $query = "SELECT
                          p.ProdCode,
                          p.ProdName,
                          c.CatId,
                          c.CatParentId,
                          c.CatName
                      FROM
                          products p
                               INNER JOIN
                                   categories c
                               ON
                                   c.CatId = p.CatId
                      WHERE
                          c.CatName = '".$catName."'";
            $validate->Query($query);
            if ($validate->NumRows() >= 1) {
                while ($row = $validate->FetchAllDatas()) {
                    // show products here if there are no child categories.
                }
            }
        }
    }
    ?>
</section>

但是在更新 1 之后,我想我已经提出了其他 bug/错误 :->

更新 1 中的上述查询工作得很好,前提是父类别中根本没有产品,但子类别中有产品。如果父类目中有产品(有子类目),则不显示父类目产品,仅显示子类目产品。

如果用户单击父类别,我想显示父类别的所有产品以及子类别的所有产品。

如何解决此错误/错误?

php mysql shopping-cart cart
1个回答
-1
投票

据我了解,我还远不是专业人士,当使用 2 个表作为 1 个表时,您需要在两个表中使用相同的键,然后使用互连。像这样的东西。

    $products = [];
if (isset($_GET['component_id'])) {
    $sql = "SELECT inventory.* FROM inventory 
            JOIN components ON inventory.type = components.type 
            WHERE components.component_id = " . $_GET['component_id'];
    $result = $conn->query($sql);
© www.soinside.com 2019 - 2024. All rights reserved.