0

'テーブルA'のすべてのユーザーを一覧表示し、'テーブルB'のレコードを照合してフラグを表示するmySQL結合テーブルのヘルプが必要です。

Table A (users)
=====================
id | name 
=====================
1  | aaa 
2  | bbb 
3  | ccc 
4  | ddd 
5  | eee 



Table B (users_likes) 
=====================
like_by | like_to 
=====================
1       | 2  
1       | 3  
2       | 3  
4       | 1  
5       | 1  

ユーザー'aaa'(id:1)がシステムにログインし、検索を実行して、詳細を除くすべてのユーザーを一覧表示すると、結果は次のようになります。

2 | bbb 
3 | ccc 
4 | ddd 
5 | eee 

また、リストするときに「like_by」を示すフラグを確認する必要があります。例:

2 | bbb | (flag:TRUE) 
3 | ccc | (flag:TRUE) 
4 | ddd | flag:false) 
5 | eee | (flag:false)
4

3 に答える 3

2

あなたの問題の簡単な解決策は、使用することですUNIONSubQueryこれ以外の解決策が存在する可能性がありますが

SQLFiddleデモ

SELECT  DISTINCT b.id, b.name,'TRUE' AS FLAG
FROM    users_likes a
             INNER JOIN users b
                  on a.like_to = b.id
WHERE   like_by = 1
UNION
SELECT  DISTINCT id, name,'FALSE' AS FLAG
FROM    users
WHERE   ID NOT IN
(
     SELECT  DISTINCT b.id
     FROM    users_likes a
                  INNER JOIN users b
                       on a.like_to = b.id
     WHERE   like_by = 1
)
AND id <> 1

または使用せずにUNION、はるかに単純なソリューションは以下のとおりです。

SQLFiddleデモ

SELECT  a.id,
        a.name,
        IF(COALESCE(b.like_by, -1) = 1, 'TRUE', 'FALSE') AS `Flag`
FROM    users a
             LEFT JOIN users_Likes b 
                 ON a.id = b.like_to
WHERE    a.ID <> 1
GROUP BY a.id
于 2012-08-08T13:18:38.713 に答える
0

私はこれがあなたが求めているものだと思います:

SELECT a.id,a.name,b.like_by IS NOT NULL
FROM users a
LEFT JOIN users_likes b ON (a.id = b.like_to)
GROUP BY a.id

これにより、「a」のすべてのアイテムに、like_toが存在する場合は1、存在しない場合は0が与えられます。
(WHERE a.id!= 1を追加して、ユーザー1を除外できます)。

編集:ユーザー1のいいねに基づいて、3番目の列をtruefalseに変更します。もともとはそうだと思っていました。

SELECT a.id,a.username,b.like_by IS NOT NULL
FROM users a
LEFT JOIN user_likes b ON (a.id = b.like_to AND b.like_by = 1)
WHERE a.id != 1
GROUP BY a.id

http://sqlfiddle.com/#!2/ea34d/10

于 2012-08-08T13:53:05.703 に答える
0

このクエリを試してください

select 
B.like_to,
BNames.name,
case when B.like_by = 1 then True else False end
from Table_A A
left outer join Table_B B on A.id = B.like_by
left outer join Table_A BNames on B.like_to = BNames.id
where B.like_to <> 1

それが役に立てば幸い。

于 2012-08-08T14:07:32.557 に答える