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

标签 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,3 行用于created_at、updated_at 和deleted_at,总共 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 万行,而且还在不断增长。我想我可能每天都必须这样做。我有什么选择,我该怎么做?

非常感谢。

最佳答案

好吧,我相信这就是你所需要的。经过一点研究,这里是 SQL Fiddle 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;

关于php - 选择一些行并以不同方式显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25934562/

相关文章:

php - 在 Android Studio 中用 Double 解析 JSONArray

php - 将自定义字段添加到结帐和注册时的 my_account 用户详细信息

php - Html 表单 - php - mysql 日期字段?

mysql - 使用标签在数据库中存储文本

mysql - 二进制与普通文本匹配的性能

php - SQL 删除语法错误,还有一些 PHP 和 Jquery

php - 使用 Doctrine 实体和 JMSserializer 避免递归

php - Laravel 迁移 Postgres 报错

mysql - SQL,根据外键选择多个值,返回值

sql - postgres 从间接相关的表中删除