互惠的朋友PHP

时间:2015-11-01 19:24:43

标签: php sql mysqli inner-join

所以我通常不会这样请求帮助,所以这是第一次。但是,我现在已经绞尽脑汁两天了,因为查询很可能很简单。

我想要计算和实际用户打印出我们彼此相互的就像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 

}

1 个答案:

答案 0 :(得分:0)

$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 JOIN的{​​{1}}会在friends中找到那些有{。}}的记录 friends设置为您的已连接用户,并与其加入的用户记录表达友谊。 现在,如果user1_id中没有此类记录,则friends记录将从结果集中过滤掉。 所以实质上在第一个user之后我们留下了对应的用户记录 给所连接用户的朋友。

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

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