【问题标题】:Mysql combining data from columns to rowMysql将数据从列组合到行
【发布时间】:2013-01-10 09:14:51
【问题描述】:

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(近一百万条记录。),因此脚本会非常慢/需要很长时间才能完成。

【问题讨论】:

  • 列数是固定的吗?
  • 数据透视后,您打算如何处理这些数据?
  • 是否有 person_id 列,或者名称是唯一的。如果有一百万行,不太可能只有一个“John Smith”
  • reg 列数,大概有 20 列。注册我计划在旋转它之后执行的操作,将数据旋转到单个记录中,然后删除其他具有空 mob2、mob3、mob4 的记录。 Reg person_id 是的,每个人都有一个IC,所以我可以唯一识别每个人。
  • eggyal 非常感谢'pivot'这个词。我不知道这叫做枢轴操作...

标签: mysql row pivot copying


【解决方案1】:

我认为您需要使用存储过程,请查看这些其他帖子以获取(可能)有用的信息:

或者你可以尝试使用一个函数和一个 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)。

【讨论】:

  • 感谢您向我展示了如何使用 GROUP BY,基于我的查询,创建了一个临时表,然后 mysql 查询快速地完成了这项工作。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多