2015-09-25 54 views
0

我有一個表記錄發送到不同平臺(有3)由用戶的消息。相同的消息可以發送到多個平臺。我想通過user_id和GROUP BY message_code對錶進行排隊,每個平臺都有自己的列,其中1表示已發送,0表示未發送。MYSQL - 由一列組和另一個

這是可能實現一個MYSQL SELECT隊列?

 
+------------------------------------+ 
|id |message_code |platform |user_id | 
+------------------------------------+ 
|1 |2wkdeyu  |1  |256  | 
|2 |2wkdeyu  |2  |256  | 
|3 |4kdi940  |1  |256  | 
|4 |3eji903  |2  |256  | 
|5 |4kdi940  |2  |256  | 
|6 |4kdi940  |3  |256  | 
|7 |6eioio4  |1  |256  | 
+------------------------------------+ 

我做了什麼。

SELECT message_code,GROUP_CONCAT(platform)AS platforms,user_id FROM message_log WHERE user_id ='256'GROUP BY message_code;

 
+--------------------------------+ 
|message_code |platform |user_id | 
+--------------------------------+ 
|2wkdeyu  |1,2  |256  | 
|4kdi940  |1,2,3 |256  | 
|3eji903  |2  |256  | 
|6eioio4  |1  |256  | 
+--------------------------------+ 

但我想完成的是這個。

 
+----------------------------------------------------------+ 
|message_code |platform 1 |platform 2 |platform 3 |user_id | 
+----------------------------------------------------------+ 
|2wkdeyu  |1   |1   |0   |256  | 
|4kdi940  |1   |1   |1   |256  | 
|3eji903  |0   |1   |0   |256  | 
|6eioio4  |1   |0   |0   |256  | 
+----------------------------------------------------------+ 

任何幫助,將不勝感激。

+1

這被稱爲樞軸代,如果'platform'值是已知的,然後它容易別的動態sql –

+2

[MySQL的透視表(可能重複http://stackoverflow.com/問題/ 7674786/mysql-pivot-table) – Strawberry

+0

它與我的問題類似,但不一樣我不計算列中的值我想識別它們,然後根據該值返回一列。 – LDC

回答

1

試試這個:

select message_code, 
     coalesce(max(case when platform=1 then 1 end),0) as `platform 1`, 
     coalesce(max(case when platform=2 then 1 end),0) as `platform 2`, 
     coalesce(max(case when platform=3 then 1 end),0) as `platform 3`, 
     user_id 
from message_log 
where user_id=256 
group by message_code; 

您可以使用case檢查特定的平臺。

SQL小提琴實施例:http://sqlfiddle.com/#!9/74b1e/3

+0

這將起作用,但作爲網站的新手,您還應該解釋如何以及爲什麼其他人有理解,而不僅僅是......在這裏做。另外,您可以通過僅改變爲...「然後1個0結束」來刪除合併,從而簡化每個條目。 – DRapp