我有一张桌子:
ID name
1 john, peter, ken
如何使用MYSQL将name列(使用逗号分隔的值分隔)分隔到单独的列中?
ID name
1 john
1 peter
1 ken
答案 0 :(得分:2)
你可以使用这样的查询:
SELECT
id,
n.digit,
name,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ',', n.digit+1), ',', -1)
FROM
mytable
INNER JOIN
(SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n
ON LENGTH(REPLACE(name, ',' , '')) <= LENGTH(name)-n.digit
(请注意,这最多只能分隔4个名字)。
小提琴是here。
<强>解释强>
我正在使用一个返回0到3之间所有数字的查询(例如,您可以使用带有10或100个数字的索引表):
SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
然后我使用此加入条件将此号码加入mytable
:
ON LENGTH(REPLACE(name, ',' , '')) <= LENGTH(name)-n.digit
这是检查名称列是否至少包含n.digit
名称的“脏”方法(我正在删除所有逗号,我正在检查长度与完整字符串的差异)。
使用SUBSTRING_INDEX,您可以获得n.digit+1
逗号左侧字符串的一部分:
SUBSTRING_INDEX(name, ',', n.digit+1)
再使用一个带负参数的SUBSTRING_INDEX,你只能将字符串的一部分保留到第一个逗号:
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ',', n.digit+1), ',', -1)
答案 1 :(得分:0)
如果你需要将数据导入mysql,那么你可以使用explode创建一个php文件来为每个id创建一个数组。
这些可能有所帮助:
How can I split a comma delimited string into an array in PHP?