繁体   English   中英

共同的朋友PHP

[英]Mutual Friends PHP

所以通常我不会这样求助,所以这是第一次。 但是,对于一个很可能很简单的查询,我已经花了两天的时间。

我想获取数量,并且实际用户打印出我们彼此一样,就像facebook一样。

我的表格如下。

朋友编号| user1_id | user2_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 

}
$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
");

说明:

首先,您的user_id列是数字列,因此您不应将其值括在引号中。

SELECT ... FROM user没有秘密,它将选择所有用户。

然后INNER JOINfriends会发现,在这些记录friends是有user1_id设置为您连接的用户,并表示与它加入了用户记录了友谊。 现在,如果friends没有此类记录,则将user记录从结果集中过滤掉。 因此,本质上,在第一个INNER JOIN之后,我们留下的用户记录对应于所连接用户的朋友。

然后第二个INNER JOIN再次尝试寻找朋友,但有一个区别。 这次, user1_id必须与给定的$user2_id匹配。 因此,这仅限于用户#2的朋友。 现在,在应用了第一个INNER JOIN之后,这些朋友中的一些已经从结果集中过滤掉了,所以现在,我们仅通过去除不是用户#2朋友的用户来进一步减少结果集。

这样就可以达到预期的最终结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM