这是我的数据结构:
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查询该视图..但我认为必须有一个更好的方法只使用一个查询。有任何想法吗? 感谢
答案 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的答案好,只是说还有其他方法可以做到这一点。