共同好友 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 JOIN
和 friends
将在 friends
中找到那些具有
user1_id
设置为您连接的用户并表达与它加入的用户记录的友谊。
现在,如果 friends
中没有这样的记录,那么 user
记录就会从结果集中过滤掉。
所以本质上,在第一个 INNER JOIN
之后,我们剩下的是对应的用户记录
给连接用户的朋友。
然后第二个 INNER JOIN
再次尝试寻找朋友,但有一点不同。这个
时间 user1_id
必须与给定的 $user2_id
匹配。所以这仅限于朋友
用户#2。现在其中一些朋友已经从结果集中被过滤掉了
在应用了第一个 INNER JOIN
之后,所以现在我们只进一步减少结果集
通过删除不是用户 #2 的朋友的用户。
这给出了期望的最终结果。
所以通常我不会像这样寻求帮助,所以这是第一次。但是我已经为一个很可能很简单的查询绞尽脑汁两天了。
我想获得计数和实际用户打印出我们相互之间的信息,就像 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 JOIN
和 friends
将在 friends
中找到那些具有
user1_id
设置为您连接的用户并表达与它加入的用户记录的友谊。
现在,如果 friends
中没有这样的记录,那么 user
记录就会从结果集中过滤掉。
所以本质上,在第一个 INNER JOIN
之后,我们剩下的是对应的用户记录
给连接用户的朋友。
然后第二个 INNER JOIN
再次尝试寻找朋友,但有一点不同。这个
时间 user1_id
必须与给定的 $user2_id
匹配。所以这仅限于朋友
用户#2。现在其中一些朋友已经从结果集中被过滤掉了
在应用了第一个 INNER JOIN
之后,所以现在我们只进一步减少结果集
通过删除不是用户 #2 的朋友的用户。
这给出了期望的最终结果。