【发布时间】:2013-08-29 17:33:01
【问题描述】:
这是我的表格布局:
我想做的事:
- 计算特定房间中每个
songID的votes数量(作为参数传入)。
- 了解用户 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 |
+--------+-----------+--------+
【问题讨论】:
-
你能把你想要的输出吗
-
songs中的RoomID与votes中的RoomID有什么关系? -
songs 中的RoomID和votes中的RoomID都是rooms中原始RoomID的外键 -
我明白这一点。问题是,如果一首歌曲可以在多个房间中播放,为什么你的歌曲中有
RoomID?能否提供样本数据?
标签: mysql sql relational-database