2012-09-15 46 views
2

我有2個表格,如下所示,並且希望通過計數(列)選擇它們兩者,但不工作請指教。MySQL左連接2個表按次數排序

review table 

ID | RID | Name | comment 
555|3000 | John | John comment 
555|3001 | Ben | Ben comment 
555|3002 | Smith| Smith comment 

Likes table 

U | PID 
1 | 3000 
2 | 3000 
3 | 3000 
4 | 3001 


Expected result 

ID | RID | Name | comment  | votes 
555|3000 | John | John comment | 3 
555|3001 | Ben | Ben comment | 1 

我從選擇從喜歡錶期待的結果*從審查,計數PID列

我當前的查詢是

SELECT * , (SELECT COUNT(PID) FROM Likes AS votes WHERE there.ID = PID) 
FROM review AS there 
LEFT JOIN Likes b ON there.RID = b.PID 
WHERE ID =555 
AND there.RID = b.PID AND votes>0 
ORDER BY votes DESC 

但是,這並不沃金,請告知。

+1

需要分組和投票應該是嵌套查詢結果的名稱 –

回答

5

由於您使用的審查,只有票後,就可以通過轉換LEFT JOININNER JOIN,並消除COUNT檢測讓您的查詢較短(也許更快):http://www.sqlfiddle.com/#!2/1f920/3

SELECT r.ID, r.RID, r.Name, `Comment`, COUNT(RID) as votes 
FROM review r 
JOIN Likes l ON l.PID = r.RID 
WHERE r.ID = 555 
GROUP BY r.RID 
ORDER BY votes DESC 

輸出:

| ID | RID | NAME |  COMMENT | VOTES | 
-------------------------------------------- 
| 555 | 3000 | John | John comment |  3 | 
| 555 | 3001 | Ben | Ben comment |  1 | 
+0

感謝邁克爾·布恩它與短查詢工作。 – Thanaporn

3
SELECT ID, RID, Name, `Comment`, COUNT(RID) as votes 
FROM review AS there 
LEFT JOIN Likes b ON there.RID = b.PID 
WHERE ID = 555 
AND there.RID = b.PID 
GROUP BY b.PID 
HAVING votes > 0 
ORDER BY votes DESC 

sqlfiddle

+0

謝謝guido,這對我有用。 :) – Thanaporn