选择一些行并以不同方式显示

时间:2014-09-19 13:01:57

标签: php mysql sql

我有一张这样的表:

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万行并且它在增长。我想我必须这样做 - 每天都可以。我有什么选择,我该怎么做?

非常感谢你。

1 个答案:

答案 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;