Mysql 选择当前用户拥有的所有项目,如果不是,则显示较少的项目

Mysql 选择当前用户拥有的所有项目,如果不是,则显示较少的项目,mysql,select,Mysql,Select,假设您有3个表:用户、歌曲和用户歌曲。用户是自己歌曲的编辑,或者他们被邀请编辑的歌曲的编辑,但是他们不能编辑任何其他人 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) 我想我可

假设您有3个表:用户、歌曲和用户歌曲。用户是自己歌曲的编辑,或者他们被邀请编辑的歌曲的编辑,但是他们不能编辑任何其他人

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)

我想我可能会要求有冲突的连接,所以我不确定这是否可能

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]
请尝试让我们知道您的意思。

就像$user\u 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

您可以在一个查询中完成这一切


您如何知道用户是否已被邀请编辑歌曲。从结构上看不清楚。他们的ID会出现在用户歌曲中。如果是的话,我想阿尔玛·多·芒多的答案是正确的
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;