gpt4 book ai didi

mysql - 一个用户的 friend +与另一个用户共同的 friend 测试

转载 作者:可可西里 更新时间:2023-11-01 07:07:49 26 4
gpt4 key购买 nike

我有这张表,我使用(但不仅限于)将 friend 存储在数据库中:

user_1 | user_2 | status

其中“状态”可以是 -1、0 或 1。在这里,我们将仅考虑状态为“0”(用户_1 待定)或“1”(用户_2 已批准)的情况。我有以下查询来为给定的 $user 寻找未决/批准的 friend :

SELECT user_1,user_2,status
FROM Friends
WHERE (user_2 = '$user' OR user_1 = '$user') AND status >= 0;

这里的目标是修改查询以判断给定的 $user2 是否是 $user1 的共同(批准) friend 以及 $user1 的每个(批准) friend 。

经过一些研究,我发现左连接可以解决问题,方法是将另一个字段设置为 NULL(如果没有相互)或 $user2。我想有效地做到这一点。我尝试了几次拍摄,但没有成功。

预先感谢您的帮助

编辑:例如,假设我们有以下条目:

a | b | 1
c | a | 1
c | b | 1
a | d | 1

我想列出 'a' 的 friend ,对于 'a' 的每个 friend f,验证 'b' 是否是 f 和 'a' 的共同 friend 。此外,f =/= b 用于相互测试。此类查询的结果将是:

a | b | 1 | NULL
c | a | 1 | b
a | d | 1 | NULL

如果您需要更多说明,请告诉我

最佳答案

因为在 MySQL 中查询会非常复杂和缓慢,我自己不会使用它,这里有一个 PHP 中的解决方案,只有一个查询:

<?php

// $db = mysqli_connect(...);

function findMutualFriends($of,$mutual_with){
global $db;
$user_friends = array();
$mutual_friends = array();
$results = array();

$res = mysqli_query($db,"SELECT user_1,user_2,status FROM Friends WHERE ((user_2 = '$of' OR user_1 = '$of') OR (user_2 = '$mutual_with' OR user_1 = '$mutual_with')) AND status >= 0;";
while($row = mysqli_fetch_assoc($res)){
if($row['user_1'] == $of || $row['user_2'] == $of){
$user_friends[] = (($row['user_1'] == $of) ? $row['user_2'] : $row['user_1']);
}
if($row['user_1'] == $mutual_with || $row['user_2'] == $mutual_with){
$mutual_friends[(($row['user_1'] == $mutual_with) ? $row['user_2'] : $row['user_1'])] = 1;
}
}
foreach($user_friends as $friend){
if($mutual_firends[$friend]){
$results[] = $friend;
}
}
return $results;
}

?>

请注意,它尚未经过测试。可能包含一些小的语法错误,但应该返回一个共同好友数组。

关于mysql - 一个用户的 friend +与另一个用户共同的 friend 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41403987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com