この出力を生成できます。
+----------+------------+------------+------------+
| startt | 2013-04-01 | 2013-04-02 | 2013-04-03 |
+----------+------------+------------+------------+
| 08:00:00 | Donald | Daisy | Mickey |
| 12:00:00 | Pluto | Goofy | Minnie |
| 14:00:00 | NULL | Mickey | NULL |
+----------+------------+------------+------------+
この元のデータから:
mysql> select * from test;
+------------+----------+----------+--------+
| startd | startt | duration | name |
+------------+----------+----------+--------+
| 2013-04-01 | 08:00:00 | 4 | Donald |
| 2013-04-02 | 08:00:00 | 4 | Daisy |
| 2013-04-03 | 08:00:00 | 4 | Mickey |
| 2013-04-03 | 12:00:00 | 4 | Minnie |
| 2013-04-01 | 12:00:00 | 4 | Pluto |
| 2013-04-02 | 12:00:00 | 4 | Goofy |
| 2013-04-02 | 14:00:00 | 4 | Mickey |
+------------+----------+----------+--------+
mysql>
この MySQL 動的クエリを使用します。
1 set @sql = null;
2 select
3 group_concat(distinct
4 concat(
5 'group_concat(case when startd = ''',
6 `startd`,
7 ''' then `name` end ) as `',
8 `startd`,'`'
9 )
10 ) into @sql
11 from test;
12
13 set @sql = concat('select startt, ',@sql,'
14 from test
15 group by startt');
16
17 prepare stmt from @sql;
18 execute stmt;
19 deallocate prepare stmt;
この時点までご協力いただきありがとうございます @ hims056.
この動的クエリの結果を、PHP でループできる変数に渡すにはどうすればよいですか?
過去に私は使用しました:
$result=mysqli_query($con,"select ...");
... lines deleted ...
while ($row=mysqli_fetch_array($result))
... lines deleted ...
この方法は、このような状況では適切ではないようです。
任意の支援をいただければ幸いです。