0

myfriends私は2列で呼ばれるテーブルを持っています:

  • friend_id1
  • friend_id2

誰かが何人かの友人である場合、2 つのレコードが存在します。たとえば、1000、1001、1002、1003 の 4 つのメンバーを考えてみましょう。

1000 と 1001 が互いに友人である場合、 と の 2 つのレコードが存在(1000, 1001)(1001, 1000)ます。例として、1000 が 1002 とも友達であると仮定します。

ログインしているユーザーと友達ではない人(たとえば 1000 人) を表示し、それぞれの横に共通の友達数を表示したいと考えています。例を考えると、1002 の前に 1 を、1003 の前に 0 を表示する必要があります。

これは、テーブル内の名前の横にある [友達として追加] ボタンを使用してすべてのメンバーを一覧表示するために使用するコードとクエリの一部です。

$query ="SELECT profile_name,friend_id from friends
                    WHERE friend_id<>'$friendID'
                    AND
                    friend_id NOT IN( SELECT friend_id2 from myfriends WHERE friend_id1='$friendID')";

$results = @mysqli_query($conn, $query) or die
$row = mysqli_fetch_row($results);

echo "<table width='50%' border='1'>";
while ($row) {
    echo "<tr><td>{$row[0]}</td>";
    ?>
    <td><button onclick = "window.location.href='friendadd.php?addfriend=<?php echo $row[1];?>'">Add as friend</button></td></tr>
    <?php
    $row = mysqli_fetch_row($results);
}
echo "</table>";

プロフィール名と友達追加ボタンの間にお互いの友達数を表示したいです。

4

2 に答える 2

0

ユーザー 1 がユーザー 7 と 2 回フレンドになることはできないと仮定します (つまり、user_a = 1、user_b=7 の行と、user_a = 7、user_b = 1 の行が存在することはありません)。

SELECT IF(user_a = 1 OR user_a = 2, user_b, user_a) friend
FROM friendship
WHERE (user_a = 1 OR user_a = 2) OR (user_b = 1 OR user_b = 2)
GROUP BY 1
HAVING COUNT(*) > 1
于 2014-05-04T06:33:14.870 に答える