2017-02-13 77 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)。

非常感谢!

问候,

范尼

相关问题