2

PHP で簡素化されたソーシャル ネットワーキング サイトを構築しています。myfriends テーブルと friends テーブルの 2 つのテーブルがあります。

myfriends テーブルにはfriend_id1friend_id2列があります。Friends テーブルにはfriend_idprofile_nameおよびemail列があります。

myfriends テーブルは 2 人の友人をリンクします。双方向ではなく、一方向の関係を想定します。これは、friend_id1 には友人の friend_id2 があることを意味しますが、その逆はありません。

説明するために、メンバーを 4 人だけ取りましょう1001,1002,1003,1004

1001 が 1002 と 1003 を知っている (そしてその逆も想定している) が、1002 と 1003 がお互いを知らず、1004 が誰も知らない場合、myfriends テーブルには次のエントリが含まれます。

(1001,1002),(1001 ,1003),(1002 ,1001),(1003, 1001)

友達ではないすべての人を取得するクエリが必要です。これは、すべての友達を取得するために思いついたクエリです。friend_id は、友達table.myfriendsテーブルの主キーであり、主キーはありません。

 SELECT friends.profile_name 
 FROM friends 
 INNER JOIN myfriends ON friends.friend_id=myfriends.friend_id1 
 WHERE myfriends.friend_id2='$friendID'"; 

質問が皆さんにとって明確であることを願っています。

4

2 に答える 2

0

これにはもっと洗練された解決策があるかもしれませんが、次のようになります。

SELECT f.profile_name 
FROM friends f 
WHERE 
    f.id <> 1004 AND 
    f.id NOT IN 
    (
        SELECT mf.friend_1 
        FROM myfriends mf 
        WHERE 
            mf.friend_1 = 1004 AND 
            mf.friend_2 = 1004
    ) AND 
    f.id NOT IN 
    (
        SELECT mf2.friend_2 
        FROM myfriends mf2 
        WHERE 
            mf2.friend_1 = 1004 OR 
            mf2.friend_2 = 1004
    );

これはあなたが望む結果を与えるようです。

于 2013-05-15T13:50:27.217 に答える
0

$sql="select profile_name from friends
where friend_id<>login_user_id
and
friend_id NOT IN( select friend_id2 from myfriends where friend_id1=login_user_id);

于 2013-05-15T12:07:30.440 に答える