类别为

时间:2015-12-12 16:41:15

标签: php mysql

这是我的数据结构:

category_main
id  name
---------------------
1   catmain1  
2   catmain2

category_sub
id  name     id_catmain
---------------------
1   catsub1  1
2   catsub2  1
3   catsub3  2

images
id  name     catsub
---------------------
1   image1   1
2   image2   1
3   image3   2
4   image4   3

期望的输出:

id_catmain  catmain    images_total
--------------------------------------------------
1           catmain1   3
2           catmain2   1

问题在于获得每个主要类别的图像总量。 我试过像(作为观点)

的东西
select categories.*, group_concat(id) as all_cat from categories group by id_catmain 

然后使用FIND_IN_SET查询该视图..但我认为必须有一个更好的方法只使用一个查询。有任何想法吗? 感谢

2 个答案:

答案 0 :(得分:2)

我认为这些方面应该有用:

SELECT c.id, c.name, COUNT(*) AS images_total FROM images i
JOIN category_sub cs ON cs.id = i.catsub
JOIN category_main c ON c.id = cs.id_catmain
GROUP BY c.id

您基本上在做的是将所有图像表的行绑定到它们所代表的子类别,然后通过子类别ID将主要类别绑定到同一行。然后,您可以简单地计算所有行,按所有不同的主类别ID对计算的行数进行分组。

答案 1 :(得分:1)

您可以通过多种方式解决此问题。其中一个是使用子查询:

SELECT c.id AS id_catmain, c.name AS catmain,
  (SELECT COUNT(i.id) AS totalImages
  FROM images i
  INNER JOIN category_sub s ON i.catsub = s.id
  WHERE s.id_catmain = c.id) as totalImages
FROM category_main c
ORDER BY c.name ASC;

此处示例:{{3}}

这并不比Bun的答案好,只是说还有其他方法可以做到这一点。