Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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 共同的朋友_Php_Sql_Mysqli_Inner Join - Fatal编程技术网

Php 共同的朋友

Php 共同的朋友,php,sql,mysqli,inner-join,Php,Sql,Mysqli,Inner Join,所以通常我不会像这样寻求帮助,所以这是第一次。但我已经为一个很可能很简单的问题绞尽脑汁两天了 我想把数字和实际用户打印出来,就像facebook一样,我们相互交流 我的桌子如下 朋友 id | user1_id | user2_id |状态 使用者 id |第一个|最后一个 所以我理解了它背后的简单想法。如果我和某人是朋友,他们也和那个人是朋友,那个人就变成了共同的朋友 我尝试了下面的方法,但没有真正的结果,也尝试了很多其他的离线例子,坦率地说,我不理解内部连接,因为我很少使用它们,所以如果有人

所以通常我不会像这样寻求帮助,所以这是第一次。但我已经为一个很可能很简单的问题绞尽脑汁两天了

我想把数字和实际用户打印出来,就像facebook一样,我们相互交流

我的桌子如下

朋友 id | user1_id | user2_id |状态

使用者 id |第一个|最后一个

所以我理解了它背后的简单想法。如果我和某人是朋友,他们也和那个人是朋友,那个人就变成了共同的朋友

我尝试了下面的方法,但没有真正的结果,也尝试了很多其他的离线例子,坦率地说,我不理解内部连接,因为我很少使用它们,所以如果有人能想出一些东西,并可能解释每个部分,这可能会帮助我和其他人为未来解决一些问题

我的会话id在$user1_id之下,用户2在$user2_id之下,如果这有帮助的话,所有这些都会针对MYSQLI注入进行消毒

谢谢所有能帮助我的人

 $mutual_friends = mysqli_query($mysqli,"
SELECT user.id
FROM user
WHERE EXISTS(
    SELECT friends.user1_id, friends.user2_id, friends.status
    FROM friends 
    WHERE friends.user1_id = '$user1_id' AND friends.status = 2 
      AND friends.user2_id = user.id
  )
  AND EXISTS(
    SELECT friends.user1_id, friends.user2_id, friends.status
    FROM friends 
    WHERE friends.user1_id = '$user2_id' AND friends.status = 2 
      AND friends.user2_id = user.id
  )
");
$mutualfriend=mysqli_fetch_array($mutual_friends);
$mutualfriendcount=mysqli_num_rows($mutual_friends);
The mutual friend count by number
echo"".$mutualfriendcount.";

var_dump($mutual_friends );
while($mutualfriend=mysqli_fetch_array($mutual_friends)){

The list of users by name and id 

}
说明:

首先,您的user_id列是数字列,因此不应该将它们包装起来 引号中的值

选择。。。从用户没有秘密,它选择所有用户

然后,与好友的内部连接将在好友中找到那些记录 user1\u id设置为您连接的用户,并表示与它所加入的用户记录的友谊。 现在,如果friends中没有这样的记录,那么用户记录将从结果集中过滤掉。 所以本质上,在第一次内部连接之后,我们留下了相应的用户记录 发送给已连接用户的朋友

然后第二个内部连接再次尝试寻找朋友,但有一点不同。这 时间user1\u id必须与给定的$user2\u id匹配。因此这仅限于朋友 用户2。现在,其中一些朋友已经从结果集中筛选出来了 在应用了第一个内部联接之后,现在我们只需进一步缩减结果集 通过删除不是用户2的朋友的用户


这就给出了期望的最终结果。

我认为您需要一个递归函数,该函数将用户的好友作为参数发送,并为您的每个好友及其好友的好友等调用它。例如:$user\u core=new user\u core$check=$user\u core->check\u friends;表中的用户id列是数字数据类型还是字符数据类型?我使用了您的查询并在var dump objectmysqli\u result5 5{[current\u field]=>int0[field\u count]=>int3[length]=>NULL[num\u rows]=>int0[type]=>int0}但我没有打印出任何姓名或id,我有一个共同的朋友加上另一个,所以至少应该有一个。如果我进入单独的页面查看他们与mutualfriends.php的关系吗?user2_id=83显示您的数据,这样我们就可以检查自己了。你确定你的数据中所有友谊的状态都是2吗?另外,数据库中用户id字段的数据类型是什么。如果是数字,则不应在SQL中的用户id周围加引号。两个字段中的id都是INT11。friends being friends的状态为2..1处于挂起状态,0不是friends。好的,我已经更新了我的答案,并包含了周围的PHP语句。
$mutual_friends = mysqli_query($mysqli,"
SELECT     user.user_id,
           user.first,
           user.last
FROM       user
INNER JOIN friends as friends1
       ON  friends1.user2_id = user.id
       AND friends1.user1_id = " . $user1_id . "
       AND friends1.status = 2
INNER JOIN friends as friends2
       ON  friends2.user2_id = user_id
       AND friends2.user1_id = " . $user2_id . "
       AND friends2.status = 2
");