想象一下,您有3个表:用户,歌曲和users_songs。用户是他们自己的歌曲或歌曲的编辑,他们已被邀请编辑,但他们无法编辑任何人。
users
-id
-username
songs
-id
-is_ready
-name
users_songs
-id
-user_id
-song_id
is_ready
为0或1 - 表示歌曲未准备好/准备好显示在首页的列表中。
我想选择当前用户ID拥有的所有歌曲,无论ready = 1还是ready = 0,但只选择 ready = 1 的歌曲,如果他们是'由其他用户ID重新拥有。
我想我可能会要求有冲突的联接,所以我不确定它是否可能......
答案 0 :(得分:1)
就像($user_id
是当前用户ID):
SELECT
songs.*
FROM
songs
LEFT JOIN users_songs ON songs.id=users_songs.song_id
WHERE
user_songs.user_id=$user_id
OR
is_ready=1
答案 1 :(得分:0)
SELECT songs.*
FROM songs, users, users_songs
WHERE users.id = users_songs.user_id
AND (users_songs.song_id = songs.id OR songs.is_ready = 1)
AND users.id = [current user id]
如果这就是你的意思,请尝试告诉我们。
答案 2 :(得分:0)
您可以在一个查询中执行此操作。
SELECT us.user_id, s.name, s.is_ready
FROM songs s, users u, users_songs us
WHERE us.song_id = s.id
and
(u.id = us.user_id
OR (us.user_id <> u.id AND s.is_ready = true))
AND u.id = 1;