0

私はtable1(id、name)、table2(id [table1.idへのFK]、user_id、visit)を持っています。table1.idごとに、table1からその名前を表示し、ユーザーをカウントし、このIDに属するuser_idを表示する必要があります.table2.visit = 1の場合、ユーザーをカウントし、このidに属するuser_idを表示し、table2.visit =の場合0. また、テーブル 1 の一部の ID がテーブル 2 に存在しない可能性があります。これらの ID については、カウンターに 0 を入れたいと考えています。

結果テーブルは次のようになります。

id|name|count_visitors|list_of_visitors_id|count_non_visitors|list_of_non_visitors_id|
1 |a   |2             |5,10               |1                 |4                      |

クエリを手伝ってもらえますか?

4

1 に答える 1

1
SELECT t1.name, 
       COALESCE( visitors.visitors_count, 0) AS `count_visitors`,
       COALESCE( visitors.visitors_list, '') AS `list_of_visitors_id`, 
       COALESCE( nonvisitors.nonvisitors_count, 0 ) AS `count_non_visitors`,
       COALESCE( nonvisitors.nonvisitors_list, '') AS `list_of_non_visitors_id`
FROM table1 t1
LEFT JOIN
( SELECT id, GROUP_CONCAT( user_id ) AS visitors_list, COUNT(*) AS visitors_count
    FROM table2
    WHERE visit = 1
    GROUP BY id ) visitors
ON t1.id = visitors.id
LEFT JOIN
  ( SELECT id, GROUP_CONCAT( user_id ) AS nonvisitors_list, COUNT(*) AS nonvisitors_count
    FROM table2
    WHERE visit = 0
    GROUP BY id ) nonvisitors
ON t1.id = nonvisitors.id

自分で試してみてください: Sqfiddle

1 人のユーザーに必要な場合は、最後に 1 行追加するだけです。

WHERE t1.id = 1
于 2013-04-30T22:16:44.457 に答える