Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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查询检索顶级类别中的项目计数以及包含直接子类别中的项目_Mysql - Fatal编程技术网

如何使用mysql查询检索顶级类别中的项目计数以及包含直接子类别中的项目

如何使用mysql查询检索顶级类别中的项目计数以及包含直接子类别中的项目,mysql,Mysql,我试过 SELECT c.* , ( SELECT COUNT( * ) FROM item t WHERE t.cat_id = c.cat_id )ct_items, ( SELECT COUNT( * ) FROM item t INNER JOIN cat c3 ON t.cat_id = c3.cat_id AND c3.cat_id = c.parent_id ) ct_sub FROM cat c WHER

我试过

SELECT  c.* , (
    SELECT COUNT( * )
    FROM item t
    WHERE t.cat_id = c.cat_id
    )ct_items, (

    SELECT COUNT( * )
    FROM item t
    INNER JOIN cat c3 ON t.cat_id = c3.cat_id
    AND c3.cat_id = c.parent_id
    ) ct_sub
FROM cat c
WHERE parent_id = '0'
ORDER BY name
但在“on子句”中获得未知列“c.parent\u id”。你知道我为什么用mysql查询来实现这个目的吗?不过,我可以使用多个查询和php等来计算数字


谢谢

您不必在一个查询中完成所有操作;有时,试图将查询粘合在一起会导致性能下降(尤其是涉及相关子查询时)。两个问题可以;当您为每一行调用一个新查询时,您就会遇到问题

因此,您可以获得类别项目:

SELECT c0.*, COUNT(i0.id) AS cat_nitems
FROM cat AS c0
LEFT JOIN item AS i0 ON i0.cat_id=c0.cat_id
WHERE c0.parent_id= '0'
GROUP BY c0.cat_id
ORDER BY c0.name
然后使用父子自联接分别获取子类别项:

SELECT c0.*, COUNT(i1.id) AS subcats_nitems
FROM cat AS c0
LEFT JOIN cat AS c1 ON c1.parent_id=c0.cat_id
LEFT JOIN item AS i1 ON item.cat_id=c1.cat_id
WHERE c0.parent_id= '0'
GROUP BY c0.cat_id
ORDER BY c0.name
是的,您可以将它们合并到一个查询中:

SELECT c0.*, COUNT(DISTINCT i0.id) AS cat_nitems, COUNT(DISTINCT i1.id) AS subcats_nitems
FROM cat AS c0
LEFT JOIN cat AS c1 ON c1.parent_id=c0.cat_id
LEFT JOIN item AS i0 ON item.cat_id=c0.cat_id
LEFT JOIN item AS i1 ON item.cat_id=c1.cat_id
WHERE c0.parent_id= '0'
GROUP BY c0.cat_id
ORDER BY c0.name
我怀疑较大的联接和
不同的
处理可能会降低效率。但我猜在一个你不会注意到的小数据库里


无论哪种方式,这只适用于两个深度嵌套。一般来说,如果需要子类或任意深度树,你应该考虑一个更好的建模树的模式,比如嵌套集合。< /P>这条链接可以帮助:管理MySQL中的层次数据:谢谢…我知道一切不必都在一个查询中,但我想知道为什么它不起作用。我只需要它两个深嵌套,所以不感兴趣的嵌套集。谢谢你的提问,我正在玩它。