count()作为某种东西

时间:2011-07-16 15:50:35

标签: mysql join count left-join inner-join

我有下表: 类:

cat_id | cat_cat | cat_name
     1 |       0 | name1
     2 |       0 | name2
     3 |       1 | name3
     4 |       2 | name4
     5 |       2 | name5
     6 |       0 | name6
     7 |       1 | name7

我试图用cat_cat = 0选择所有类别,并选择将cat_cat作为当前cat_id的每条记录的计数,基本上给我以下结果:

cat_id | cat_cat | cat_name | cat_subcats
     1 |       0 | name1    |           2
     2 |       0 | name2    |           2
     6 |       0 | name7    |           0

我尝试了多个查询,目前的查询如下:

SELECT i.* , COUNT( i2.icon_id ) AS subcats
FROM themes_icons i, themes_icons i2
WHERE i.icon_cat =  '0'
    AND i2.icon_cat = i.icon_id
GROUP BY i.icon_cat, i2.icon_id
ORDER BY i.icon_order ASC

这个查询似乎给了我以下结果:

cat_id | cat_cat | cat_name | cat_subcats
     1 |       0 | name1    |           1
     1 |       0 | name1    |           1
     2 |       0 | name2    |           1
     2 |       0 | name2    |           1
     6 |       0 | name7    |           0

任何人都知道如何获得理想的结果。我也尝试过加入声明,但是它们一直给我错误。

提前致谢。

1 个答案:

答案 0 :(得分:2)

SELECT c1.cat_id, c1.cat_cat, c1.cat_name,
(
  SELECT COUNT(*)
  FROM categories c2
  WHERE c2.cat_cat=c1.cat_id
) AS cat_subcats
FROM categories c1
WHERE c1.cat_cat=0

它是一个标准的SELECT,除了用于计算当前类别的子类别的子选择。