1

私のウェブサイトでは、Twitter のようにお互いをフォローするというコンセプトを持っています。次のような構造のユーザー接続テーブルがあります。

================================================== ============

接続先 | ConnectedBy | セッション ID | Connect_Status | 記録日

================================================== ============

ConnectedToは、接続先のユーザーを保持します

Connected By は、接続しているユーザーを保持します

セッションID が再度保持されます接続しているユーザー

ここで、ユーザー A がユーザー B に接続されていると仮定すると、テーブル エントリは次のようになります。

===============================

B_id | A_id | A_id | 接続 | 日にち

===============================

A が B をフォローしている場合、B が A をフォローしていても、次のようになります。

===============================

A_id | B_id | B_id | 接続 | 日にち

===============================

今私が望むのは、両方がお互いをフォローしている場合、ネットワークと呼ばれるページがあるため、ユーザー A と私がログインし、ネットワークページに移動すると、フォローしている人々が私をフォローバックしていることがわかりますが、どのユーザーが私をフォローバックしているかをどのように検出すればよいかわかりません...それはGoogleに加えて、ユーザーをフォローしている場合は彼をフォローしていると思いますが、彼があなたをフォローバックしている場合は、友達ではありません..そのため、フィールドXなどのフィールドを 1 つ追加する必要があります。接続する前に、そのユーザーが私をフォローしているかどうかを確認し、両方のレコードをフィールド X の友達として更新する必要があります。

そしてPS私は多くのことを試したので、私が何を試したかを聞かないでください、私は試しました、そして試しましたが、まだうまくいきません

4

3 に答える 3

1
$query = "SELECT c.ConnectedTo, cc.ConnectedBy
          FROM connections c
          LEFT JOIN connections cc ON c.ConnectedTo=cc.ConnectedBy AND cc.ConnectedTo='" . $loged['my_loged_user_id'] . "'
          WHERE c.ConnectedBy='" . $loged['my_loged_user_id'] . "'";
$sql = $mysqli->query($query);
while($row = $sql->fetch_assoc()) {
    if(isset($row['ConnectedBy'])) {
        // I'm connected with $row['ConnectedTo'] who is also following me
    } else {
       // I'm connected with $row['ConnectedTo'] but he don't follows me
    }
}
于 2012-09-21T11:07:16.073 に答える
1

ユーザー ID が@idで、接続テーブル名が であるとしCONNECTIONます。次に、次のクエリは、あなたに接続されているすべてのユーザーの ID を一覧表示します。

select 
   me2friend.ConnectedTo
from 
   CONNECTION me2friend,
   CONNECTION friend2me
where
   me2friend.ConnectedBy = @id and
   me2friend.ConnectedTo = friend2me.ConnectedBy and
   friend2me.ConnectedTo = @id
于 2012-09-21T11:13:02.020 に答える
0

これは非常に単純な問題のようです。最初にクエリを実行して、ユーザーが既に接続しているかどうかを確認し、相互接続にする必要があるかどうかを確認します。

SELECT * FROM tbl_connections WHERE ConnectedTo = $foreign_user_id OR connectedBy = $foreign_user_id

行を取得したら (または取得しない場合)、リレーションの方向を判断し、必要に応じてユーザー ID を追加します。

if($result->rowCount() > 0){
    foreach($result as $row){
        if($row['ConnectedTo'] == $my_user_id) $row['ConnectedBy'] = $foreign_user_id;
        if($row['ConnectedBy'] == $my_user_id) $row['ConnectedTo'] = $foreign_user_id;
        $row['Connect_Status'] = 2; // 2 denotes that it is a mutual connection on the graph
        // Save row
        break;
    }
}else{
    // Insert new row
}

これは手短な答えです。

確かにこれは最も洗練されたソリューションではありませんが、相互関係をいつ、どのように作成するかという点で、より強力なソリューションです。お気づきのように、G+ での 2 人の人間の二重関係は、必ずしも友達を意味するわけではありません。実際には、それらを配置するグループにも依存します。

編集

上記のコードは、新しい友達を作るときにのみ使用されます。クエリを実行するときは、すべての行をクエリしてから、connect_status によって判断された相互接続のラベルを表示するか、その connect_status のみをクエリすることができます。

SELECT * FROM tbl_connections WHERE Connect_status = 2

すべての相互接続を取得します。

于 2012-09-21T11:10:26.763 に答える