我是编程新手,目前正在尝试将主类别+子类别显示为树。
带有类别的菜单已创建。现在,我希望当我单击主类别名称时加载分配给该主类别的所有子类别中的所有产品。问题是我不明白如何构建我的查询。
在我的表类别中,我存储了主猫和子猫。当我向某个主类别添加子类别时,我将主类别 ID 存储在 ParentID 列下。
示例
ID Name parentID
426 Main Cat 0
427 sub-cat 426
428 sub-cat 2 426
429 Main cat 2 0
产品表有categoryID
列
productID categoryID
1 427
2 428
3 429
因此,当我点击 maincatID=1 时,它应该向我显示 id 1 和 2 的产品,因为它们被分配给分配给主猫 1 的 sub-cat
我尝试过这个查询
$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
的子项中...产品 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 中添加参数只是为了测试目的。
最佳答案
尝试使用以下查询:
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 - 选择主类别时显示子类别的复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40975633/