MySQL查询,记录没有用IN子句选择正确

时间:2015-09-08 09:21:12

标签: php mysql

这里我有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

我在这里做错了什么?

2 个答案:

答案 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;