2 LEFT JOINS在查询中计数

时间:2010-11-23 14:29:43

标签: mysql left-join

我有一个下载组件,希望类别提前显示子类和项目计数。两者中的一个都有效,但是当试图获得两者时,结果是两者的相乘。

我使用的代码:

  

选择a。*,
   count(b.parentid)AS catscount,
  count(c.id)AS itemscount
  FROM(jos_foc_downl_categories AS LEFT JOIN jos_foc_downl_items AS c ON c.catid = a.id)
    LEFT JOIN jos_foc_downl_categories AS b ON b.parentid = a.id
  在哪里a.parentid = 0
  GROUP BY a.id

这导致一个类别包含4个子类别和5个文件,数字20表示catscount,20表示itemscount。

这有什么问题?谢谢!

1 个答案:

答案 0 :(得分:7)

您计算所有行,包括重复值。使用DISTINCT仅计算每个不同的值一次:

SELECT a.*,
count(DISTINCT b.parentid) AS catscount,
count(DISTINCT c.id) AS itemscount
....
相关问题