共同好友 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没有秘密,它select所有用户。

然后 INNER JOINfriends 将在 friends 中找到那些具有 user1_id 设置为您连接的用户并表达与它加入的用户记录的友谊。 现在,如果 friends 中没有这样的记录,那么 user 记录就会从结果集中过滤掉。 所以本质上,在第一个 INNER JOIN 之后,我们剩下的是对应的用户记录 给连接用户的朋友。

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

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