Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查是否存在某些用户ID';s是在单个查询中与登录用户的好友_Php_Mysql_Sql - Fatal编程技术网

Php 检查是否存在某些用户ID';s是在单个查询中与登录用户的好友

Php 检查是否存在某些用户ID';s是在单个查询中与登录用户的好友,php,mysql,sql,Php,Mysql,Sql,我的网站上有一个简单的朋友系统。现在我正在尝试创建一个多用户群消息系统,但仅限于朋友之间。我的消息系统的“To”值是逗号值,我想检查它们是否都是发送消息的人的朋友 例如,我可以通过以下查询获得用户的所有好友: SELECT relation_setter user_id FROM users_relationships WHERE relation_getter = {$logged_in_user} AND active = 1 UNION SELECT relation_getter use

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

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

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
我把娜塔莎、丽塔作为我的消息表单中的$_POST['to']值,然后转换成用户ID,得到类似于
126152112238的东西

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

关系模式:

用户关系

id PK
relation_setter FK user_id
relation_getter FK user_id
active smallint(1)
user_id PK
name
username
password
etc etc...
关系设置器是发送好友请求的人。为了得到我所有的朋友,我得到了所有的ID,其中我的ID要么是
关系设置者
要么是
关系设置者

用户

id PK
relation_setter FK user_id
relation_getter FK user_id
active smallint(1)
user_id PK
name
username
password
etc etc...

你的文章提供了对模式的模糊见解,因此我将使用一些假设

您可以通过IN语句找到与其朋友匹配的所有ID。由于已将它们作为带有逗号的数值,您可以执行以下操作:

SELECT user_id
FROM users_relationships
WHERE relation_getter IN (126152,112238,123456)
AND active = 1
这将只返回匹配好友的记录。然后可以将行数与查询中的元素数进行匹配,以确定它们是否是朋友。你也可以发送给匹配的人

编辑

这将返回此人朋友的所有用户ID,无论他们是getter还是setter,并且该ID处于活动状态

编辑2

新桌子

您的会员关系示例如下:

  id  |  user_id  |   relation_setter
--------------------------------------
  1      12345               1  
--------------------------------------
  1      98765               0
--------------------------------------
然后,如果进行查询,则只会收到有效的用户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)

你为什么不把发送者的所有朋友都找出来,然后遍历“收件人”列表,检查这些人是否在朋友数组/列表中?重要的是要知道他们是否都是朋友;或者想知道列表中哪些是朋友?你的模式是什么样的?@Mikeb我在想,即使有一个人不在friends中,帖子也不会出现,错误会显示谁都不是朋友…@didierc我用这个模式编辑了这个问题。我想差不多就是这样,需要不同的分区(getter和setter都有)。查询如何知道如何查找登录用户的好友?似乎您正在尝试验证好友列表,但是您的模式应该进一步规范化,以实现您的目标。请参阅我的第二次编辑。