【问题标题】:Mutual Friends PHP共同的朋友 PHP
【发布时间】:2016-02-01 15:55:50
【问题描述】:

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

我想要统计和实际用户打印出我们相互之间的信息,就像 facebook 一样。

我的表格如下。

朋友 编号 | user1_id | user2_id |状态

用户 编号 |第一 |最后

所以我掌握了它背后的简单想法。如果我和某人成为朋友,并且他们也是那个人的朋友,那么那个人就会成为共同的朋友。

我尝试了以下没有实际结果并尝试了许多其他离线示例,坦率地说,我不理解内部连接,因为我很少使用它们,所以如果有人能想出一些东西并可能解释每个这部分可能会帮助我和其他人为未来制定一些计划。

我的会话 ID 在 $user1_id 之下,用户 2 在 $user2_id 之下

感谢任何可以帮助我的人。

 $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_core = new user_core; $check = $user_core->check_friends();
  • 表中的用户id列是数字还是字符数据类型?

标签: php sql mysqli inner-join


【解决方案1】:
$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 朋友的用户。

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

【讨论】:

  • 我使用了您的查询并在 var dump object(mysqli_result)#5 (5) { ["current_field"]=> int(0) ["field_count"]=> int(3) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } 中得到了这个但我没有打印出任何名称或 ID,并且我有 1 个共同的朋友添加了另一个,所以至少应该有一个。
  • 如果我进入一个单独的页面与mutualfriends.php一起查看它们有关系吗?user2_id=83
  • 向我们展示您的数据,以便我们检查自己。您确定所有好友的状态在您的数据中都是 2 吗?另外,数据库中 user_id 字段的数据类型是什么。如果它是数字,那么您不应该在 SQL 中的用户 ID 周围加上引号。
  • 两个字段中的 ID 都是 INT(11)。好友为好友的状态为 2..1 为待处理,0 为非好友。
  • 好的,我已经更新了我的答案,并包含了周围的 PHP 语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多