2017-02-13 71 views
-1

MySQL試圖向SQL表中添加一列。 該表包含對象發佈人員。該對象不是唯一的,但時間戳是。 我想爲每個包含也在每行發佈該對象的人員名稱的對象添加一列。MySQL從一列中添加值,但將各行添加到每行的一列中

+-------+-------+--------+ 
| ID | name | timeXX | 
+-------+-------+--------+ 
| ID001 | name1 | timeXX | 
| ID001 | name2 | timeXY | 
| ID001 | name1 | timeYX | 
| ID002 | name2 | timeZX | 
| ID002 | name1 | timeYZ | 
| ID002 | name3 | timeXZ | 
| ID002 | name1 | timeZZ | 
+-------+-------+--------+ 

我想的東西落得像

+-------+-------+--------+---------------+ 
| ID | name | time | grouped_name | 
+-------+-------+--------+---------------+ 
| ID001 | name1 | timeXX | name2   | 
| ID001 | name2 | timeXY | name1   | 
| ID001 | name1 | timeYX | name2   | 
| ID002 | name2 | timeZX | name1, name3 | 
| ID002 | name1 | timeYZ | name2, name3 | 
| ID002 | name3 | timeXZ | name1, name2 | 
| ID002 | name1 | timeZZ | name2, name3 | 
+-------+-------+--------+---------------+ 

這將是可能的。如果是這樣,怎麼樣?我會很高興知道!

感謝您的幫助,問候,

範尼

+1

你的意思是你想要的表在物理上包括一個新列將包含這些數據呢?或者你的意思是你想要一個返回表中數據的查詢,加上這個新值? –

+0

我寧願第一個。當作爲視圖存儲時,第二個選項也可以工作。對? – Ruudvddries

+1

如果沒有很好的理由,你不應該改變表格。這將使你的模式非規範化。 –

回答

0

試試這個:

select t.id,t.name,t.time,(
select group_concat(DISTINCT t2.name separator ',') 
from times t2 where t2.id=t.id AND (t.time like concat('%',substring(REPLACE (t2.time,'time', ''),1,1),'%') 
OR t.time like concat('%',substring(REPLACE (t2.time,'time', ''),2,1),'%')) AND t2.name<>t.name 
group by t2.id 
) as time_group from times t 
0

感謝respons和反饋。它幫了我很多。

現在我在下面的解決方案中找到了答案。不完全是我想要的結果,但我可以與它合作。

SELECT * ,GROUP_CONCAT(DISTINCT `name`) AS `grouped_name` FROM table GROUP BY `time` 

因爲我想的。減去被grouped_namegrouped_name加入到該行的名稱,最好的結果。

但現在這工作得很好。我想我最初的問題並不清楚,因爲我的問題翻譯成英文,並且做了我沒有完全掌握的東西(mySQL)。

非常感謝!

問候,

範尼

相關問題