我有一张这样的表:
ID Student_ID Name Surname Grade Address
----------------------------------------------------
1 111 John Doe A address1
2 112 Michael Jackson B address2
3 155 John Petrucci A address3
...
...
我想要做的是,以某种方式获取此输出:
John Doe Michael Jackson John Petrucci ...
A B A ...
但我有495名学生。 ID为一行,created_at,updated_at和deleted_at为3行,使495 + 1 + 3 = 499列。
我猜,我不能制作这样的桌子。我必须做什么?取所有行(我有超过500万行数据)并将它们放在PHP的表中?我只想以不同的方式显示数据。我不想存储它们,编辑它们。我只是想以不同的方式展示它们。我怎样才能做到这一点?
非常感谢你。
修改
我有这张桌子:
+---------+----------+-------+----------+-------+-------+---------------------+
| id | query_id | name | time | value | pct | query_time |
+---------+----------+-------+----------+-------+-------+---------------------+
| 5051657 | 9983 | AAA | 14:31:28 | 1,12 | 0,00 | 2014-09-19 14:59:32 |
| 5051656 | 9983 | BBB | 14:35:03 | 6,77 | 0,30 | 2014-09-19 14:59:32 |
| 5051655 | 9983 | CCC | 14:33:58 | 5,04 | -0,59 | 2014-09-19 14:59:32 |
| 5051654 | 9983 | DDD | 14:32:30 | 0,55 | 0,00 | 2014-09-19 14:59:32 |
| 5051653 | 9983 | EEE | 14:25:59 | 2,01 | 0,00 | 2014-09-19 14:59:32 |
| 5051652 | 9983 | FFF | 14:30:05 | 2,00 | 0,00 | 2014-09-19 14:59:32 |
| 5051651 | 9983 | GGG | 14:35:00 | 12,20 | 0,41 | 2014-09-19 14:59:32 |
| 5051650 | 9983 | HHH | 14:26:26 | 4,06 | 1,00 | 2014-09-19 14:59:32 |
| 5051649 | 9983 | III | 14:35:06 | 18,80 | 2,17 | 2014-09-19 14:59:32 |
| 5051648 | 9983 | JJJ | 14:34:04 | 3,11 | 1,63 | 2014-09-19 14:59:32 |
+---------+----------+-------+----------+-------+-------+---------------------+
我想要的是这样的:
+----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| query_id | AAA | BBB | CCC | DDD | EEE | FFF | GGG | HHH | III | JJJ |
+----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 1 | 1,12| 6,77|-0,59|0,00 |0,00 |0,00 | 0,41|1,00 |2,17 | 1,63|
| 2 | 1,13| 6,33|-0,33|0,33 |0,11 |0,45 | 0,56|1,34 |2,45 | 1,19|
+----------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
如果可能,我只想要一个CSV文件。我获得了超过500万行并且它在增长。我想我必须这样做 - 每天都可以。我有什么选择,我该怎么做?
非常感谢你。
答案 0 :(得分:0)
好吧,我相信你需要的东西。通过一些研究,这里是SQL小提琴http://sqlfiddle.com/#!2/56f62/23
SET @query = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('MAX(IF(name = ''', name, ''', value, 0)) AS ', name)
)INTO @query
FROM tbl_name;
SET @query = CONCAT('SELECT ', @query, ' FROM tbl_name');
PREPARE statement FROM @query;
EXECUTE statement;
DEALLOCATE PREPARE statement;