mysql - 从项目表中进行选择的 SQL 查询,该表连接到类别表
问题描述
我有类别表的结构:
- ID
- 标题
- is_active ( 0 或 1)
- parent_id
项目表的结构:
- ID
- 标题
- is_active (0 或 1)
- 类别ID
表通过一对多关系与 category_id 字段相关联。那些。1 个类别可以有许多项目。
类别表中的两级层次结构。这定义了主要类别和子类别。类别是 parent_id = NULL 的那些记录。和子类别,这些是其中 parent_id = 到某个 id 的那些记录。
一个项目既可以属于主类别(其中 parent_id = null),也可以属于子类别(子类别)。项目可以是活动的和不活动的(0 或 1)。类别和子类别也可以是活动的和不活动的。
请告诉我。我无法查询以选择项目。我需要从 Items 表中选择状态为 is_active = 1 的项目,它们是:1) 加入到主类别,其中 has_active = 1。2) 最困难的是:项目加入到子类别中status is_active = 1,其中有一个status 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 )
推荐阅读
- javascript - 尝试获取多个图像时,Angular observable 抛出状态码为 200 的错误
- android - 在图表上绘制 BLE 实时数据
- java - 使用 JCabi Java 读取 UTF-16 XML 文件
- javascript - RequireJS:“express”和“cors”的脚本错误,但不知道如何修复它
- bash - 在循环中询问用户输入,直到在命令行参数数组中找到匹配项
- ios - 如何修改现有的 iOS 应用程序以支持拆分视图
- html - 输入从哪里获得额外的宽度?
- python - Visual Studio Code 和 Autopep8 格式化程序
- python - 求解微分方程时,Numba prange 函数比范围慢
- javascript - 如何在不增加小时数的情况下将 GTM-0006 转换为 ISO