php - 在单个查询中检查某些用户 ID 是否与已登录用户为好友

标签 php mysql sql

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

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

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 函数,它检查单个用户 ID 是否是已登录用户的好友。

关系模式:

用户关系

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

relation_setter 是发送好友请求的人。为了获得我所有的 friend ,我获得了所有 ID,其中我的 ID 是 relation_setterrelation_getter

用户

user_id PK
name
username
password
etc etc...

最佳答案

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

您可以通过 IN 语句找到与他们的 friend 匹配的所有 ID。由于您已经将它们作为带有逗号的数值,您可以这样做:

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

这将只返回匹配的 friend 的记录。然后,您可以将行数与查询中的元素数进行匹配,以确定他们是否是 friend 。您也可以只发送给匹配的人。

编辑

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

这将返回此人 friend 的所有用户 ID,无论他们是 getter 还是 setter 并且它是事件的。

编辑 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)

关于php - 在单个查询中检查某些用户 ID 是否与已登录用户为好友,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15763712/

相关文章:

php - 如何在 Zend 中获取查询结果

mysql - 具有多列子查询的SQL笛卡尔积,未知列问题

php - 在 mysql id 上添加日期前缀

php - CakePHP 检查引用

javascript - 如何使我的 php 变量可访问?

php - 要求一次记录错误的PHP用法

SQL查询按字母顺序排序

javascript - 将 PHP 代码传递给 Javascript 不起作用

mysql - 控制字符等效触发器MySQL

sql - 美元金额的数据库记录集匹配