在MySQL查询中将多行中的串联值作为新行插入

在MySQL查询中将多行中的串联值作为新行插入,mysql,sql,Mysql,Sql,我目前有一个表,其中包含“字段类型”(用户名、城市、州)、“用户id”和“值”列。用户id列显然有很多重复。我想将城市和州数据合并到一个“位置”字段\类型值中。我需要一些能: 对于用户id列中的每个整数: -检查字段类型“城市”和“州”是否存在对应的(非空)表行 -如果是,请在表中插入一个新行,该行的字段类型为“location”,该字段连接该用户id的相应城市和州值 我很少使用MySQL,所以我真的不知道从哪里开始。我试图将问题简化一点——实际上这是一个更复杂的wordpress表,我正在尝试

我目前有一个表,其中包含“字段类型”(用户名、城市、州)、“用户id”和“值”列。用户id列显然有很多重复。我想将城市和州数据合并到一个“位置”字段\类型值中。我需要一些能:

对于用户id列中的每个整数:
-检查字段类型“城市”和“州”是否存在对应的(非空)表行
-如果是,请在表中插入一个新行,该行的字段类型为“location”,该字段连接该用户id的相应城市和州值

我很少使用MySQL,所以我真的不知道从哪里开始。我试图将问题简化一点——实际上这是一个更复杂的wordpress表,我正在尝试重新格式化数据以与新插件兼容,但这涵盖了必须发生的事情的基本知识,因此我希望能够从答案中推断出一个实际的解决方案。谢谢你的指点

编辑:当前结构如下所示:

|-id(键)-|-字段_类型-|-用户_id-|-值-|
|1 |用户名| 1 |乔|
|2 |城市| 1 |奥尔巴尼|
|3 |州| 1 |纽约|
|4 |用户名| 2 |鲍勃|
|5 |城市| 2 |托莱多|
|6 | state | 2 | OH |

我想得到这样的东西:

|-id(键)-|-字段_类型-|-用户_id-|-值---------|
|1 |用户名| 1 |乔|
|2 |城市| 1 |奥尔巴尼|
|3 |州| 1 |纽约|
|4 |用户名| 2 |鲍勃|
|5 |城市| 2 |托莱多|
|6 |州| 2 |哦|
|7 |位置| 1 |纽约州奥尔巴尼|
|8 |位置| 2 |俄亥俄州托莱多|


重复的用户id值是它应该如何工作的,因此它们不需要删除。

您可以使用
插入。。。选择
query以执行此操作:

INSERT INTO yourtable
SELECT 'location' AS field_type, t1.user_id, CONCAT(t1.value, ' ', t2.value) AS value
FROM yourtable t1
JOIN yourtable t2 ON t2.user_id = t1.user_id AND t1.field_type = 'city' AND t2.field_type = 'state'
WHERE t1.value IS NOT NULL AND t2.value IS NOT NULL

因为有人提到存在具有相同用户id的副本。 我认为插入新行不是一个好主意。 因此,我们编写了一个更新查询来更新现有数据。 您可以稍后清理重复数据

UPDATE your_table SET locations = CONCAT_WS('-', state, city) where city is not null or state is not null

表中没有名为
位置
城市
的列;只有
字段类型
用户id
。这个查询不可能工作。为了更清楚,你可以发布表的架构定义吗?我发现从这个问题很难理解它。你能像这样更新它吗:Table:user_id(int),city(string)我更新了这个问题来澄清。重复是故意的,正如Nick所说,我试着用我原来的措辞解释这个列。哦,谢谢你,现在它更清楚了,我会考虑的。你能发布表格的模式定义以更清楚吗?@Luca很高兴听到。如果这确实解决了您的问题,请考虑标记接受的答案(在上/下投票箭头下的复选标记)。看见