0

我有一张桌子:

 ID      name
 1       john, peter, ken

如何使用 MYSQL 将名称列(值以逗号分隔)分隔成单独的列?

ID       name
1        john
1        peter
1        ken 
4

2 回答 2

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 个名称)。

小提琴在这里

解释

我正在使用返回从 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)
于 2013-06-23T12:15:14.750 回答
0

如果您需要将 thh 数据导入 mysql,那么您可以使用explode 创建一个 php 文件,为每个 id 创建一个数组。

这些可能会有所帮助:

如何在 PHP 中将逗号分隔的字符串拆分为数组?

http://php.net/manual/en/function.explode.php

于 2013-06-23T11:19:01.603 回答