我有一个用户表
id , username
22 , max
33 , jack
44 , joe
和朋友桌
id , u1 , u2 , status , reciver
为了提高阅读朋友的速度,我决定为每个友谊在表格中添加两行,所以它是这样的
id , u1 , u2 , status , reciver
1 , 22 , 33 , 1 , 22
2 , 33 , 22 , 1 , 22
3 , 22 , 44 , 1 , 22
4 , 44 , 22 , 1 , 22
5 , 22 , 55 , 1 , 22
6 , 55 , 22 , 1 , 22
现在我想获取每个用户的朋友,并计算这两个用户之间的共同朋友,比如 facebook
这是我的朋友列表查询:
$profile_id = $current_user->id;
$res = $db->query("
select
u.id as firend_id,
u.username as firend_name,
f.status as firendship_status,
COUNT(f3.u2) as mutual
from friends f
JOIN users u on f.u2 = u.id
LEFT JOIN friends f2 on f.u2 = f2.u1 and f2.u2 != $profile_id
LEFT JOIN friends f3 on f3.u1 = $profile_id AND f3.u2=f2.u2
WHERE f.u1 = $profile_id
group by f2.1
");
echo 'friends list : '
foreach ($res->result() as $r ){
echo $r->firend_name;
echo $r->mutual.' friends';
}
所以我对照friends.u1检查个人资料ID($profile_id)的所有者并将friends.u2(建立的朋友)加入用户表以获取他的用户名和ID
问题在于计算共同的朋友
我在每个已建立的朋友中加入了自己的朋友表
在纸上看起来没问题,但它返回了一些奇怪的结果
就像用户有 3 个朋友并且没有共同的朋友一样,它只返回 3 个朋友中的一个!
如果有共同的朋友,它会显示所有的朋友,但在大多数情况下,共同的朋友号码是错误的
group by 语句有问题