私はユーザーテーブルを持っています
id , username
22 , max
33 , jack
44 , joe
そして友達のテーブル
id , u1 , u2 , status , reciver
友達を読む速度を上げるために、友達ごとに2行をテーブルに追加することにしたので、次のようになります
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のようにこれら2つの間の共通の友達を数えたいと思っています
ここに私の友達リストのクエリがあります:
$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';
}
だから私はプロファイル ID ($profile_id) の所有者を friends.u1 に対してチェックし、friends.u2 (設立された友人) を users テーブルに参加させて、彼のユーザー名と ID を取得します
問題は共通の友達を数えることです
私は、設立された各友人に自分自身で友人テーブルに参加します
紙の上では問題ないように見えますが、奇妙な結果が返されます
ユーザーに 3 人の友達がいて、共通の友達がいない場合と同様に、3 人の友達のうちの 1 人だけが返されます。
また、相互の友達がいる場合はすべての友達が表示されますが、ほとんどの場合、相互の友達の数は間違っています
group by ステートメントに問題があります