這裏是我的表佈局複雜MySQL的Select查詢
[在這裏輸入的形象描述] [1]
我想這樣做:
- 計數的
votes
數對於特定房間中的每個songID
(作爲參數傳入)。 - 找出用戶ID是否對特定房間中的歌曲有至少一票投票。用戶ID也作爲參數傳入。
- 上述兩者的延伸。如果歌曲沒有投票,我想爲這些條目返回0。
我有什麼:
select a.SongID, count(*) as voteCount, b.UserID
from votes a left join votes b
on a.songID = b.songID
and b.RoomID = 178
and b.UserID = 71
where a.RoomID = 178
group by a.SongID, b.UserID
(隨意使用這些RoomID
和UserID
號碼的例子)
上面的SQL語句做1和2,但不是3.是否有任何方式來擴展它做3?在單個查詢中完成所有這些將會很好。現在它將返回所有有投票的歌曲,投票數以及有問題的UserID
已投票(否則爲空)。提前致謝。
編輯:只是爲了澄清一點,目前這個語句只會輸出歌曲在votes
表項,即時通訊試圖修改它以包括沒有在votes
表項(即,歌曲包括Select SongID from songs where RoomID = 178
中的所有歌曲)。請注意,一切都是針對特定房間的。歌曲通過SongID
與某個房間相匹配。
這裏是我的例如歌曲表:
+--------+--------+
| SongID | RoomID |
+--------+--------+
| 2835 | 178 |
| 2836 | 178 |
| 2837 | 178 |
| 2838 | 178 |
| 2839 | 178 |
| 2840 | 178 |
| 2841 | 178 |
| 2842 | 178 |
| 2843 | 178 |
| 2844 | 178 |
| 2845 | 178 |
| 2846 | 178 |
| 2847 | 178 |
| 2848 | 178 |
+--------+--------+
這裏是投票:
+--------+--------+--------+
| SongID | UserID | RoomID |
+--------+--------+--------+
| 2835 | 71 | 178 |
| 2836 | 71 | 178 |
| 2837 | 71 | 178 |
| 2838 | 71 | 178 |
| 2839 | 71 | 178 |
| 2840 | 71 | 178 |
| 2841 | 71 | 178 |
| 2842 | 71 | 178 |
+--------+--------+--------+
最後,查詢的結果我至今:
只有第一7首歌曲有票,只有那些返回。我想修改此查詢以包含房間中的所有歌曲,即使它們沒有投票(並將投票計數返回爲0或null)。
+--------+-----------+--------+
| SongID | voteCount | UserID |
+--------+-----------+--------+
| 2835 | 1 | 71 |
| 2836 | 1 | 71 |
| 2837 | 1 | 71 |
| 2838 | 1 | 71 |
| 2839 | 1 | 71 |
| 2840 | 1 | 71 |
| 2841 | 1 | 71 |
+--------+-----------+--------+
你可以把你想要的輸出 – zxc
如何'RoomID'在'與'RoomID songs' ''投票'? – peterm
「歌曲」中的'RoomID'和'votes'中的'RoomID'都是「房間」中原始「RoomID」的外鍵。 –