0

私はテーブルを持っています(mysql 5.5 INNODB):サンプルの小さなデータ+質問に関連しない列をカット-実際のデータは巨大です(ミーティングテーブルに10,000,000行以上)

入力:

day:

day_id(primary key)|sunday|monday|tuesday|wensday|thursday|friday|saturday
---------------------------------------------------------------------------
60                 |1     |1     |1      |1      |1       |1    |1
74                 |0     |1     |0      |0      |0       |0     |0
98                 |0     |0     |0      |0      |0       |0     |0
..etc......................................................................

meeting:

day_id(foreign key)|time    |type
----------------------------------
60                 |20:09:00|1
98                 |07:00:00|1
74                 |22:01:00|4
98                 |10:00:00|1
60                 |23:09:00|2
98                 |06:00:00|2
74                 |21:04:00|6
98                 |08:00:00|6
.....etc.....................

出力:

sunday_times          |monday_times                           |....etc
-------------------------------------------------------------------------------------------------
20:09:00,etc...       | 20:09:00,etc..   |
................etc..............................................................................

私はそのようなことを考えています(しかし、私はSQLが初めてなので、それが良いのか合法なのかわかりません)

 SELECT 
   GROUP_CONCAT(time where day.sunday=1 ORDER BY time) as sunday_times, 
   GROUP_CONCAT(time where day.monday=1 ORDER BY time) as monday_times,  
   etc..
 FROM day
 JOIN meeting ON meeting.day_id=day.day_id
 GROUP BY type
4

1 に答える 1

7

構文が近いため、次のCASEステートメントを使用する必要がありGROUP_CONCAT()ます。

SELECT 
   GROUP_CONCAT(case when day.sunday=1 then time end order by time) as sunday_times, 
   GROUP_CONCAT(case when day.monday=1 then time end order by time) as monday_times
 FROM day
 JOIN meeting ON meeting.day_id=day.day_id
GROUP BY type

デモで SQL Fiddleを参照してください

于 2012-10-05T11:37:38.450 に答える