Mysql将数据从列组合到行

时间:2013-01-10 09:14:51

标签: mysql row pivot copying

mysql表的粗略结构是这样的 人名,手机号码1,Mob2,Mob3,Mob4。

我想做的是: 例如,如果表格中有4条记录,例如:

Person Mob1 Mob2 Mob3 Mob4
John   123  
John   435
John   324
John   432

我需要将四个记录合并为一个:

Person  Mob1 Mob2 Mob3 Mob4
John    123  435  324  433

是否可以在phpMyAdmin中使用mysql查询执行此操作? 我知道有可能使用PHP脚本,但表格非常庞大:接近500Mb(近百万条记录。),所以脚本会非常慢/需要很长时间才能完成。

1 个答案:

答案 0 :(得分:0)

我认为你需要使用存储过程,检查这些其他帖子(可能)有用的信息:

或者您可以尝试使用函数和group_concat():

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
 LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
 delim, '');

然后选择查询将是:

SELECT
  tmp.id,
  SPLIT_STR(tmp.mobs, ',', 1) as mob1,
  SPLIT_STR(tmp.mobs, ',', 2) as mob2,
  SPLIT_STR(tmp.mobs, ',', 3) as mob3,
  SPLIT_STR(tmp.mobs, ',', 4) as mob4
  FROM (
    SELECT
      id,
      GROUP_CONCAT(mob1) as mobs
    FROM person
    GROUP BY name
  ) tmp

当然,那么你必须将它整合到UPDATE声明中,但我会让你自己尝试。 (顺便说一句,从here得到FUNCTION