-1

「友達」と呼ばれるテーブルと「イベント」と呼ばれるテーブルの 2 つがあります。

テーブルfriendsには列iduser_id、およびfriend_id

テーブルeventsには列iduser_id、および title_event

「イベント」には 6 つのイベントが登録されています。2 つ目は私の 2 つ目、2 つ目は別の友達の友達です。

「友達」テーブルの友達と、私のイベントと友達のイベントを返すクエリは何ですか?

以下のクエリを使用しています。これは、友達のイベントのみを返します。イベントと友達も返すように変更するにはどうすればよいですか?

クエリ:

SELECT *
 FROM (
       SELECT a.user_id, a.friend_id
         FROM tb_friend a
       WHERE a.user_id = 1
       ) friends, 
tb_events e
WHERE e.user_id = friends.friend_id;
4

2 に答える 2

0

これはあなたが探しているものですか?

SELECT *
FROM (
    SELECT a.user_id, a.friend_id
    FROM tb_friend a
    WHERE a.user_id = 1
    ) friends, 
tb_events e
WHERE e.user_id = friends.friend_id OR e.user_id = 1;

ここで行った唯一の変更はOR e.user_id = 1、MySQL に独自のイベントを結果セットに含めるように追加することです。

于 2012-05-06T18:41:50.500 に答える
0

あなたが直面している問題は、元の "User_ID = 1" のエントリがなく、友人だけが存在することです... Daan が提供するサンプルでは、​​明らかにまだ機能していない WHERE 句を使用しています。あなたの内部クエリは、あなたとあなたの友人の両方を単一の結果として含めるUNIONであることをお勧めします...このようにして、1つの修飾リストがあります...これでもうまくいかない場合は、実際の名前なしでいくつかのサンプルデータを表示してください(とにかく、すべてのサンプルは基本的に ID であり、特別に隠す必要はありません)、他の人がより良いソリューションを提供するのに役立ちます。そのようなサンプルデータを提供する柔軟性がない場合、これから得られる応答と将来は非常に制限される可能性があります...

SELECT *
   FROM 
      ( select 1 as User_ID
        UNION
        SELECT a.friend_id AS User_ID
           FROM tb_friend a
           WHERE a.user_id = 1
       ) QualifiedPeople
      join tb_events e
         on QualifiedPeople.User_ID = e.User_ID

ここで、個別のイベントのみが必要な場合は、同じイベントに参加する複数の人が実際に各人のイベントを表示し、8 対 6 の記録を表示する可能性があるため、すべての人を表示するワイルドカードを実行しないでください... 、サンプルデータを見なければ、誰も正直に答えることはできません。

SELECT distinct e.id, e.title_event
   FROM ... same rest of query from above
于 2012-05-07T01:41:43.697 に答える