检查某个用户ID是否是单个查询中登录用户的朋友

时间:2013-04-02 12:07:00

标签: php mysql sql

我的网站上有一个简单的朋友系统。现在我正在尝试创建一个多用户组消息系统,但仅限于朋友之间。我的邮件系统的“收件人”值是逗号值,我想检查他们是否都是发送邮件的人的朋友。

例如,我可以通过以下查询获取所有用户的朋友:

SELECT relation_setter user_id
FROM users_relationships
WHERE relation_getter = {$logged_in_user}
AND active = 1
UNION
SELECT relation_getter user_id
FROM users_relationships
WHERE relation_setter = {$logged_in_user}
AND active = 1

我从我的消息表单中获取了natasha, reeta $ _POST ['to']值,然后我将其转换为用户ID并获取类似126152, 112238

的内容

现在,如何在单个查询中检查这些ID是否与登录用户都是朋友。我不想在循环中运行我的is_friend函数,它检查单个用户标识是否是登录用户的朋友。

关系架构:

users_relationships

id PK
relation_setter FK user_id
relation_getter FK user_id
active smallint(1)

relation_setter是发送好友请求的人。为了得到我的所有朋友,我得到了我的ID为relation_setterrelation_getter的所有ID。

用户

user_id PK
name
username
password
etc etc...

1 个答案:

答案 0 :(得分:1)

您的帖子提供了对模式的模糊洞察,因此我将使用一些假设

您可以通过IN语句找到与其朋友匹配的所有ID。由于您已将它们作为数字值使用逗号,您可以这样做:

SELECT user_id
FROM users_relationships
WHERE relation_getter IN (126152,112238,123456)
AND active = 1

这将只返回匹配的朋友的记录。然后,您可以将行数与查询中的元素数相匹配,以确定它们是否是朋友。您也可以发送给匹配的那些。

修改

SELECT user_id
FROM users_relationships
WHERE relation_getter IN (126152,112238,123456)
OR relation_setter IN (126152,112238,123456)
AND active = 1

这将返回该人的朋友的所有用户ID,无论他们是吸气者还是设定者,并且它是活跃的。

编辑2

新表

relationships_members

id FK (from users_relationships; not unique)
user_id

relationships_members的样本将是

  id  |  user_id  |   relation_setter
--------------------------------------
  1      12345               1  
--------------------------------------
  1      98765               0
--------------------------------------

然后,如果您查询,您将只收到有效的users_relationships ID

select distinct a.id, b.user_id as friend
from (
    select distinct id as friend
    from relationships_members
    where user_id = {$logged_in_user}
) a, relationships_members b
WHERE a.id = b.id
and user_id IN (126152,112238,123456)