我有类别表的结构:
- ID
- 标题
- is_active(0 或 1)
- parent_id
项目表的结构:
- ID
- 标题
- is_active(0 或 1)
- category_id
表通过一对多关系与category_id 字段关联。那些。 1 个类别可以有多个项目。
类别表中的两级层次结构。这定义了主要类别和子类别。类别是那些parent_id = NULL 的记录。以及子类别,这些记录是parent_id = 某个id 的记录。
一个项目可以同时属于主类别(其中parent_id = null)和子类别(子类别)。项目可以是事件的和不活动的(0 或 1)。类别和子类别也可以是事件的和不活动的。
请告诉我。我无法查询来选择项目。 我需要从 Items 表中选择状态为 is_active = 1 的项目,它们是: 1) 加入主类别,其中 has_active = 1。 2)最困难的是:这些项目被加入到状态为 is_active = 1 的子类别,该子类别有一个状态为 is_active = 1 的父类别。这实际上是用 sql 完成的吗? 我使用查询
SELECT * FROM item LEFT JOIN categories
ON item.category_id = categories.id
WHERE item.is_active = 1 AND categories.is_active = 1 AND categories.parent_id IN
(SELECT id FROM categories WHERE parent_id IS NULL AND is_active = 1)
但它返回一个空结果给我
最佳答案
SELECT item.* FROM
item INNER JOIN categories ON item.category_id = categories.id
WHERE item.is_active = 1 AND (categories.is_active = 1 AND categories.parent_id IN
(SELECT id FROM categories WHERE parent_id IS NULL AND is_active = 1)) OR ( item.is_active = 1 AND categories.parent_id IS NULL AND categories.is_active = 1 )
关于mysql - 用于从连接到类别表的项目表中进行选择的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891290/