2013-11-09 58 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`