5

以下のように2つのテーブルがあり、両方の結果をcount(column)で選択したいのですが、機能しません。アドバイスしてください。

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

LikesテーブルのカウントPID列を使用したレビューからのselect*の結果を期待しています

私の現在のクエリは

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

しかし、それは目覚めませんでした、アドバイスしてください。

4

2 に答える 2

8

投票のみでレビューを行っているので、に変換LEFT JOININNER JOIN、次の検出を排除することで、クエリを短く(そしておそらく速く)することができますCOUNThttp ://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 |
于 2012-09-15T05:29:50.717 に答える
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

于 2012-09-15T04:51:50.897 に答える