我不知道如何做到这一点,但我有两张桌子:
--users--
id_users (index)
name_users
--friend--
id_friend (index)
id_user (connects to id_users)
linked_friend (also links to id_users as this is the id of the requested friend)
要求请求友谊的一行与在friend.id_user col中请求的用户和他们请求的用户在friend.linked_friend col中存在一行。为了确认友情链接,创建了另一行,信息被反转,以便每个友谊有两行,每个用户都在friend.id_user和friend.linked_friend col中。 (如果我能以更好的方式做到这一点,请告诉我)
所以我需要做的是为每个用户列出系统中所有已确认友谊(两行)并且不是他们自己的用户。
SELECT id_user, name_user FROM user WHERE id_user <> $userId
显然会从列表中删除自己,但我不知道如何选择具有这两行的用户。
我希望这很清楚。
由于
答案 0 :(得分:0)
你可以{friend} {朋友表'两次要求两个方向的行存在:
join
我同意Jack Pettinger的说法,这个设计相当笨重。每个关系的friends表中应该只有一行。它应该有一个独特的约束来强制执行,如:
select u1.name
, u2.name
from users u1
join friend f1
on u1.id_users = f1.id_user
join friend f2
on f2.id_user = f1.linked_friend
and f2.linked_friend = f1.id_user
join users u2
on u2.is_users = f2.id_user
and u1.id_users < u2.id_users -- Display friends once
答案 1 :(得分:0)
如果要从两个或更多表中获取数据,则必须使用Join。
试试这个
select * from users left join friend on users.id_users = friend.id_user
//你还给出了特定user_id的条件