2016-10-03 75 views
2

我使用的是MariaDB 5.5,但对于此解决方案,它与MySQL相同。我有两个表格,第一个包含画廊,第二个包含每个画廊内文件的信息。这是例如表gallery的:获取连接表中儿童的总记录

+----+-------+-----+ 
| id | name | ... | 
+----+-------+-----+ 
| 1 | test1 | ... | 
| 2 | test2 | ... | 
| 3 | test3 | ... | 
| 4 | test4 | ... | 
+----+-------+-----+ 

这是例如表gallery_items

+----+------+------------+-----+ 
| id | file | gallery_id | ... | 
+----+------+------------+-----+ 
| 1 | img1 | 3   | ... | 
| 2 | img2 | 2   | ... | 
| 3 | img3 | 2   | ... | 
| 4 | img4 | 1   | ... | 
+----+------+------------+-----+ 

所以,我想这个代码:

SELECT gallery.*, COUNT(gallery_items.id) AS items FROM gallery JOIN gallery_items WHERE gallery_items.gallery_id = gallery.id; 

嘛,我不是真的数据库很好,所以这就是我寻求帮助的原因。这是我预期的结果:

+----+-------+-------+-----+ 
| id | name | items | ... | 
+----+-------+-------+-----+ 
| 1 | test1 | 1  | ... | 
| 2 | test2 | 2  | ... | 
| 3 | test3 | 1  | ... | 
| 4 | test4 | 0  | ... | 
+----+-------+-------+-----+ 

回答

6

你需要GROUP BY为了使COUNT工作

SELECT gallery.*, COUNT(gallery_items.id) AS items FROM gallery 
LEFT JOIN gallery_items ON gallery_items.gallery_id = gallery.id 
GROUP BY gallery.id, gallery.name 
+0

我从来没有之前使用了'GROUP BY',非常感谢!此外,我将'WHERE'改为'ON',因为它不适用于WHERE。可能只有在MariaDB中,不了解别人。 – debute

1

说明您可以使用下面的查询

SELECT 
    g.*,COUNT(gi.id) AS items 
FROM 
    gallery g 
LEFT JOIN gallery_items gi 
ON g.id = gi.gallery_id 
GROUP BY g.id;