Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从包含类别和子类别的表中进行选择的SQL查询_Mysql_Sql_Select_Categories - Fatal编程技术网

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)
  • 类别识别码

表通过一对多关系与category_id字段相关联。那些1个类别可以有多个项目

类别表中的两级层次结构。这定义了主要类别和子类别。类别是那些父项id=NULL的记录。和子类别,这些记录中的父项_id=到某个id

一个项目可以同时属于主类别(其中parent_id=null)和子类别(child)。项目可以是活动的,也可以是非活动的(0或1)

您需要进行查询,并从Category表中选择所有具有活动项(is_active=1)且子类别也具有活动项的主类别(其父类别的id=null)。 i、 e如果子类别中的项目处于活动状态=0,则不显示此类别

我只能选择只包含活动项目的主要类别:

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
上面的声明。。。