mysql - 选择主类别时显示子类别的复杂查询

标签 mysql

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

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

在我的表类别中,我存储了主猫和子猫。当我向某个主类别添加子类别时,我将主类别 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/

相关文章:

mysql - MySQL 查询执行速度非常慢

mysql - c3p0 客户端在等待从 com.mchange.v2.resourcepool.BasicResourcePool 获取资源时超时

mysql - 隐藏 vb6 中的连接字符串并保护 mysql 密码

分组前的 MySQL 顺序

mysql - Access 2013 - 对不规则长度字符串进行排序

mysql - 如何更改从特定数字开始的值

php - 如何使用 2 个 WHERE 子句(包括两个表,其中查询中的一列)

mysql - 将 Ruby Rails 连接到 MySQL 数据库

mysql - MySQL表在MongoDB中的正确实现?

javascript - Angularjs 将表单输入保存到 php 和 Mysql