mysql - 如何按顶级父类别获取所有项目?
问题描述
我有 2 张桌子:shop_products和shop_category。
shop_products: id、name、category_id
shop_category: id、name、parent_id、活动。活动可以是“真”或“假”。类别嵌套如 parent>subcat>subsubcat>...
如何获得所有顶级父类别活动为“true”的产品?
我尝试使用 JOIN。但它只需要最接近的类别,而不是树的顶级类别。
SELECT * FROM shop_products
INNER JOIN shop_category as sc1 ON (shop_products.category_id=sc1.id)
INNER JOIN shop_category as sc2 ON (sc1.parent_id=sc2.id)
WHERE sc2.active=1
UPD: 这里是sqlfiddle
我期望什么都得不到。因为顶级类别“Cat1”有活动假
解决方案
使用下面的查询:
SELECT s.* FROM shop_products as s WHERE EXISTS (
SELECT id FROM shop_category as sc WHERE sc.id = s.category_id AND EXISTS(
SELECT id FROM shop_category as sc1 WHERE sc.id = sc1.id AND sc1.active = 1
)
);
推荐阅读
- flutter - 如何将我声明的变量放入 AssetImage
- anaconda - Anaconda Navigator 启动时出错
- jenkins - 迁移的 Jenkins 不断重定向到原始域
- mysql - 显示带有左连接和 where not in 子句的数据
- javascript - How to comprehend clause 10.5 in ECMA-262 5.1 Edition?
- javascript - 揭示 JavaScript 解密算法
- java - 如何使用 apache-poi 更改格式化程序
- django - Django 查询将数据库列分配给错误的模型实例属性
- jmeter - 如何在while循环中使用来自JDBC请求的变量值(保存整数值)?
- loops - 如何使用 AutoHotKey 中的热键关闭 SetTimer?