2013-11-09 28 views
1

我得到了下面的表格:SQL查询与来自另一个表计数()

pictures 
------------------------------------ 
id 
name 
views 

votes 
------------------------------------ 
id 
user_id 
pic_id 

我想从一个查询,这将使我每张图片的ID,用图片的意见得到的结果,从表votes总票用于特定pic_id

例如:

pictures.id,pictures.views,总票数

1 ------------ 78- -------- --------- 123

2 ------------ 23 ------------------- 69

等等...

我尝试代码:

SELECT `pictures`.`id`,`pictures`.`views`, COUNT(`votes`.`pic_id`) as votes 
FROM `pictures` 
JOIN `votes` 
ON `pictures`.`id` = `votes`.`pic_id` 

但它不给我我想要的reuslt。

回答

2

您需要有GROUP BY条款。

使用LEFT JOIN将显示表pictures上的所有记录,在表votes上有或没有匹配记录。

SELECT a.id, a.name, a.views, 
     COUNT(b.pic_id) TotalVotes 
FROM pictures a 
     LEFT JOIN votes b 
      ON a.id = b.pic_id 
GROUP BY a.id, a.name, a.views 
+0

谢谢!解释得很好,明确地解决了左连接的问题,因为我没有想过当没有人投票给某张照片时的情况 – kfirba

1

使用留下了一组功能加入,正常加入关键字意味着内部联接,你需要一个左连接的一对多关系

SELECT `pictures`.`id`,`pictures`.`views`, COUNT(`votes`.`pic_id`) as votes 
FROM `pictures` 
LEFT JOIN `votes` 
ON `pictures`.`id` = `votes`.`pic_id` 
GROUP BY `pictures`.`id` 
1

试试这个:

SELECT `pictures`.`id`,`pictures`.`views`, COUNT(`votes`.`pic_id`) as votes 
FROM `pictures` 
JOIN `votes` 
ON `pictures`.`id` = `votes`.`pic_id` 
GROUP BY `votes`.`pic_id`; 
1

您需要使用GROUP BY子句这样尝试:

SELECT `pictures`.`id`,`pictures`.`views`, COUNT(`votes`.`pic_id`) as votes 
FROM `pictures` 
JOIN `votes` 
ON `pictures`.`id` = `votes`.`pic_id` 
group by `pictures`.`id`