2014-09-19 55 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