2014-09-19 43 views
0

我有一个表是这样的:选择一些行和显示Diffently

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列。

我猜不出这样的表。我必须做什么?取所有行(我有超过5百万行的数据)并将它们放在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

它看起来像你想通过SQL查询将行转换为列?是对的吗? – Fluffeh 2014-09-19 13:03:22

+0

你可以使用JSFiddle来提供你有什么vs你想要的例子吗?这里的期望对我来说有点不清楚。 – 2014-09-19 13:03:39

+0

您建议的输出不包含任何其他列(id,created_at,deleted_at)您真的只在寻找水平显示的名称/等级吗? – 2014-09-19 13:08:27

回答

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; 
+0

它适用于SQL小提琴,但在我的本地环境中失败。我检查了我的MySQL版本,它与SQL Fiddle的版本不同。我得到这个错误。你可以帮我吗?非常感谢你。我的表名是table_name。这不是问题。 'mysql> PREPARE语句FROM @query; 错误1064(42000):您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以找到在第1行'FROM table_name'附近使用的正确语法。 – 2014-09-19 14:42:00

+0

您使用的是什么MySQL版本? – 2014-09-19 14:54:16

+0

下面是'mysql --version'命令的输出:'mysql Ver 14.14 Distrib 5.5.37,for debian-linux-gnu(i686)using readline 6.2'非常感谢。 – 2014-09-22 07:44:14