【问题标题】:Complex query to display sub categories when main category is selected选择主类别时显示子类别的复杂查询
【发布时间】:2016-12-05 13:41:38
【问题描述】:

我是编程新手,目前正在尝试将主类别 + 子类别显示为树。

已创建包含类别的菜单。现在,当我单击主类别名称时,我想加载分配给该主类别的所有子类别中的所有产品。问题是我不明白如何构建我的查询。

在我的表格类别中,我存储了主猫和子猫。当我将子类别添加到某个主类别时,我将主类别 ID 存储在 parentID 列下。

例子

ID       Name       parentID
426       Main Cat       0
427       sub-cat        426
428       sub-cat 2      426
429       Main cat 2     0

products 表有 categoryID

productID    categoryID
   1            427
   2            428
   3            429

所以当我点击 maincatID=1 时,它应该向我显示 id 为 1 和 2 的产品,因为它们被分配给 sub-cat,而 sub-cat 被分配给主猫 1

这个查询我试过了

$masterCategory = '426';
$query="SELECT * from products  
LEFT JOIN categories on categories.categoryID = products.categoryID 
WHERE products.categoryID in (" . $masterCategory ."0)";

当我点击 catid=426 时,我应该得到 2 个产品,因为我有两个产品添加到分配给 catid=426 的 subs ... 产品 1 和 2。

问题是我有 4 到 5 个空产品,上面有 NULL 一切......这是不正确的。

Var_dump($query);返回

SELECT * from products  
LEFT JOIN categories on categories.categoryID = products.categoryID 
WHERE products.categoryID in (427,428,426,0)

var_dump($masterCategory);返回

string(12) "427,428,426,"

注意:我已经阅读过有关参数化查询的内容。我在 sql 中添加参数只是为了测试目的。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    尝试使用以下查询:

    SELECT a.ID,c.productID,b.Name,b.parentID
    FROM categories a JOIN categories b 
    ON(a.ID=b.parentID)
    JOIN products c
    ON(b.ID=c.categoryID)
    WHERE a.ID=<catid>;
    

    其中 catid 是您必须传递的主要 ID。 我已经用上面给出的数据对此进行了模拟,并且得到了预期的结果。

     ID   productID  Name       parentID  
     426  2          sub-cat 2  426       
     426  1          sub-cat    426
    

    【讨论】:

    • 感谢您的回答,但它返回空行MySQL returned an empty result set (i.e. zero rows). (Query took 0.0043 seconds.)
    • 更新了答案,请看
    • 这应该有效,但前提是您有一个级别的子类别。如果你有更多的关卡,单独的 myslq 将不是一个好的解决方案。
    • 感谢您的帮助。这暂时有效。 @Seb 目前是一级子类别,我不打算更深入:)
    • 如果答案有用,请打勾
    【解决方案2】:

    这应该可以工作

    SELECT * from products  
        LEFT JOIN categories on categories.categoryID = products.categoryID 
        WHERE categories.categoryID = 426 OR categories.parendID=426;
    

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 2015-02-15
      • 2019-06-20
      • 2012-05-04
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多