Mysql 从包含类别和子类别的表中进行选择的SQL查询
类别表的结构:Mysql 从包含类别和子类别的表中进行选择的SQL查询,mysql,sql,select,categories,Mysql,Sql,Select,Categories,类别表的结构: 身份证 头衔 家长id 项目表的结构: 身份证 头衔 是活动的(0аа1) 类别识别码 表通过一对多关系与category_id字段相关联。那些1个类别可以有多个项目 类别表中的两级层次结构。这定义了主要类别和子类别。类别是那些父项id=NULL的记录。和子类别,这些记录中的父项_id=到某个id 一个项目可以同时属于主类别(其中parent_id=null)和子类别(child)。项目可以是活动的,也可以是非活动的(0或1) 您需要进行查询,并从Category表中选
- 身份证
- 头衔
- 家长id
- 身份证
- 头衔
- 是活动的(0аа1)
- 类别识别码
SELECT categories.title, count(analyses.id) FROM items
INNER JOIN categories on items.category_id = categories.id
WHERE categories.parent_id IS NULL
AND categories.is_active = 1
GROUP BY analyses.category_id
ORDER BY analyses_categories.title
但是子类别无法再处理了,请告诉我谁有更多的经验。有点不清楚您想统计什么(只是与父项关联的活动项?),但我会使用
exists
找出哪些子项也有活动项:
select c.title, count(*)
from categories c
join item i on i.category_id = c.id
where c.parent_id is null and i.is_active = 1 and exists (
select 1
from categories c2
join item i on c2.id = i.category_id
where c2.parent_id = c.id and i.is_active = 1
)
group by c.title
你试过什么?研究如何使用
join
和exists
。学校作业?预期的结果会很有帮助,最好先自己尝试一下。我想不出一种方法可以在1个查询中实现这一点。我只是选择了主要的类别,其中只有活跃的项目。你在这方面的目标不是很清楚。试着在最后的陈述中澄清你想要达到的目标。另外,请先向我们展示您的想法,这样我们就可以为您指明方向,而不是为您这样做。由于某种原因,结果为空(我尝试输出parent_id=null的类别,其中子类别包含活动元素+类别包含活动元素)elements@tirael8这是一个示例演示(似乎对我有用):对于子类别,一切都是正确的。但是仍然需要添加一个条件,如果项目1、2或3处于活动状态,则blah1、blah2或blah3也处于活动状态output@tirael8抱歉,这没有多大意义。此时,请使用示例数据和预期结果重写您的问题。如果您不关心子类别,请删除exists
上面的声明。。。