这里我有2个像这样的数据库表,
1)的视频
id name
200119 one
200120 two
200121 three
2)sessions_to_channels
channel_id playlist_id videos
50 359 200119,200120,200121
我想从videos.name
表中选择videos
所有videos.id IN sessions_to_channels.videos
。
为此我正在使用此查询,
SELECT v.name FROM videos as v WHERE v.id in ( select videos from sessions_to_channels where playlist_id=359 and channel_id=50 )
但它只给我一条记录
id name
200119 one
我在这里做错了什么?
答案 0 :(得分:1)
如果在sessions_to_channels.videos中使用字符串,则必须使用FIND_IN_SET。 像
SELECT v.name
FROM videos AS v
WHERE FIND_IN_SET(v.id, (
SELECT videos FROM sessions_to_channels WHERE playlist_id=359 and channel_id=50 )
)
答案 1 :(得分:0)
保存以逗号分隔的数据绝不是一个好的选择,最好的选择是规范化表格。这肯定会让你的生活变得轻松,但是对于目前的情况,你可以使用find_in_set
函数作为
SELECT v.name
FROM videos v JOIN sessions_to_channels s
ON FIND_IN_SET(v.id,s.videos) > 0
WHERE s.playlist_id = 359 AND s.channel_id = 50;