【问题标题】:how to convert comma separated string to single column?如何将逗号分隔的字符串转换为单列?
【发布时间】:2018-04-10 04:34:43
【问题描述】:

表:

id    brand    group
1     adidas    1,2
2     puma      1
3     asianone  1,2,3

我想要什么结果:

id    brand    group
1     adidias  1
2     adidias  2
3     puma     1
4     asianone 1
5     asianone 2
6     asianone 3

其中 id 是自动增量..

【问题讨论】:

  • 你有没有尝试过?您从哪里获取这些数据?
  • 问题太宽泛了,您可以获取所有行,将它们分开,然后创建一个 csv 然后导入它,或者您可以再次将其分开然后将其插入另一个具有类似或源表结构的精确副本并将其插入那里
  • 你想在另一个表中插入或者你想在页面中显示结果

标签: php mysql sql phpmyadmin


【解决方案1】:
SELECT @id:=@id+1 AS id,
       `brand`,
       `group` 
FROM
(SELECT
  `id`, 
  `brand`,
   SUBSTRING_INDEX(SUBSTRING_INDEX(`group`, ',', n.digit+1), ',', -1) AS `group`
FROM
  Table1
  INNER JOIN
  (SELECT 0 AS digit 
   UNION ALL SELECT 1 
   UNION ALL SELECT 2 
   UNION ALL SELECT 3  
   UNION ALL SELECT 4 
   UNION ALL SELECT 5 
   UNION ALL SELECT 6) n
  ON LENGTH(REPLACE(`group`, ',' , '')) <= LENGTH(`group`)-n.digit
  Order by ID,`group`) AS T,(SELECT @id:=0) AS R;

输出

id  brand   group
1   adidas      1
2   adidas      2
3   puma        1
4   asianone    1
5   asianone    2
6   asianone    3

演示

http://sqlfiddle.com/#!9/be29c2/31

有关解释,请转到此链接并检查我的答案

MySql : Convert Column data to row

【讨论】:

    【解决方案2】:

    请使用PHP的explode()函数。它可以将字符串分解为数组。

    语法: 'explode(separator,string,limit);'

    【讨论】:

      【解决方案3】:
      select
         brandstable.id,
         brandstable.brand,
         SUBSTRING_INDEX(SUBSTRING_INDEX( brandstable.`groupname`, ',', numbers.n), ',', -1) `groupname`
      from
        (select 1 n union all
         select 2 union all select 3 union all
         select 4 union all select 5) numbers INNER JOIN brandstable
        on CHAR_LENGTH(brandstable.groupname)
           -CHAR_LENGTH(REPLACE(brandstable.groupname, ',', ''))>=numbers.n-1
      order by
        id, n
      
      replace your tablename with brandstable.
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,而且是为了未来的 SO 访问者。与我们分享您的一些专业知识,帮助其他程序员成长。
      猜你喜欢
      • 2023-04-02
      • 2012-09-04
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多