abc
content_1
content_1b
--- End ---
总的来说,播放列表可以是公共的(使用联结表分配给用户)或私有的(通过设置播放列表user_id属于用户)。如何在一次选择中查询用户的所有播放列表?那有可能吗?
答案 0 :(得分:1)
此查询应为您提供所需的结果。通过JOIN
(对于公共播放列表)或直接(对于私人播放列表)user
playlist
到user_playlist
:
SELECT DISTINCT p.id, p.name
FROM user u
LEFT JOIN user_playlist up ON up.user_id = u.id
JOIN playlist p ON p.id = up.playlist_id OR p.user_id = u.id
您只需添加适当的WHERE
子句(例如u.id = 4
或u.name = 'bill'
)即可选择感兴趣的用户。
答案 1 :(得分:1)
我建议exists
:
select pl.*
from playlist pl
where pl.user_id = :user or
exists (select 1
from user_playlist upl
where upl.play_list_id = pl.id and
upl.user_id = :user
);
实际上不需要user
表,除非您要为 all 个用户运行查询,或者您需要访问名称。您的问题似乎一次只涉及一个用户。