通过具有相同结果的两个变量过滤sql搜索

时间:2013-03-02 08:30:50

标签: php sql

我不知道如何做到这一点,但我有两张桌子:

--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

显然会从列表中删除自己,但我不知道如何选择具有这两行的用户。

我希望这很清楚。

由于

2 个答案:

答案 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的条件