我有一个这样的表 - 这是用户表的一部分,当用户注册时,它会获得更多行的更新:
user_id languages
1 english, french
2 english,german,french
3 german
4 english, spanish
为了进行小规模搜索,我很想将这个表转换成:
user_id language
1 english
1 french
2 english
2 german
2 french
3 german
4 english
4 spanish
注释:没有创建新表,只是正确地从users表中选择正确的select查询来执行此操作。 我正在使用phpmyadmin的mysql。欢迎任何帮助。感谢的。
答案 0 :(得分:0)
正如其他人所说,将逗号分隔值存储在列中会导致各种各样的痛苦。说完了......
创建一个数字表(描述here的一种方法)。完成后,您可以使用它将逗号分隔值拆分为单独的行:
select lang.user_id,
SUBSTRING_INDEX(SUBSTRING_INDEX(lang.languages, ', ', numbers.n), ', ', -1) language
from numbers
inner join lang on CHAR_LENGTH(lang.languages) - CHAR_LENGTH(REPLACE(lang.languages, ', ', ' ')) >= numbers.n - 1
order by lang.user_id, numbers.n;