我有一个项目列表,如果项目标记为状态 = 1,则向所有人显示这些项目。添加项目时,其状态也可能为 0,这意味着它们对所有人都不可见,除非您与提交项目的用户是好友。友谊用户标识对存储在不同的表中。
好友表有 3 列:friends_inviter、friends_accepter、friends_status(如果 friends_status = 1,则它们是好友)。发起友谊的用户(他们的ID)是邀请者,接受友谊的用户是接受者。因此,您朋友的 ID 可以显示在任一列中。
项目表(对于此示例)也有 3 列:item_id、item_status item_owner
显示出现在好友列表中的用户的状态 = 1 项以及状态 = 0 项列表的最佳方式是什么。
我的主张:
SET @userID = 1;
SELECT i.*
FROM items i
WHERE i.status = 1
OR (
i.status=0
AND
i.user_id IN (
SELECT f.inviter_id FROM friends f WHERE f.accepter_id = @userID AND f.status = 1
UNION
SELECT f.accepter_id FROM friends f WHERE f.inviter_id = @userID AND f.status = 1
)
)
[+] 我没有注意到您的编辑,但这需要您项目的表格也有列来区分谁添加了此项目
我对你的表做了一些假设,比如每个项目都有一个发布该项目的用户的外键。
select i.* from friends f
join items i on
(i.user_id = f.friends_inviter XOR i.user_id = f.friends_accepter)
where f.friends_status = 1
and i.user_id != $current_user_id
您没有给出项目表的结构,所以这是一个猜测
SELECT * FROM item i
LEFT JOIN friends f ON f.friends_status = 1 AND f.friends_inviter = i.userid
WHERE i.status = 1 OR f.friends_status IS NOT NULL`