这是我的表格布局:
我想做的事:
- 计算特定房间
votes
中每个房间的数量songID
(作为参数传入)。 - 查明用户 ID 是否对特定房间中的一首歌拥有至少一票。UserID 也作为参数传入。
- 上述两者的延伸。如果一首歌没有投票,我想为这些条目返回 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 |
+--------+-----------+--------+