将具有相同标识符的数据从行移动到 MySQL 中的列

Move data with the same identifiers from rows to columns in MySQL

我需要将具有相同 product_id 的数据从行移动到列。 示例:

From: table (product_image)
product_id    image  
----------    -----
12655         abc4.gif
12655         7hgd.gif
12655         8jd.gif
12656         23n.gif
12656         ej6.gif
12656         99j.gif
and so on
To: Table (sorted_image)
product _id    image_1    image_2    image_3
-----------    -------    -------    -------
12655          abc4.gif   7hgd.gif   8jd.gif
12656          23n.gif    ej6.gif    99j.gif
and so on

我有超过 40,000 行数据,所以我无法手动地逐一处理 products_ids。此外,对于某些人来说它可能只有 1 张图像,而对于其他 product_ids 可能最多有 7 张图像。来源 table (product_image.image) 除了 product_id.

没有任何其他标识符

请注意,图片名称都是唯一的,没有特定的名称模式。

非常感谢您的帮助。

使用此处提出的相同想法:

MySQL pivot row into dynamic number of columns

以下方法将生成一个填充有插入语句的列。可以执行这些语句来创建所需的 table。一些注意事项...

  1. 假设有一定数量的列 (7)
  2. 如果您想以编程方式执行此操作,则需要将其放入存储过程中,该存储过程将在 for 循环或其他类似结构中执行每个插入语句

    删除 TABLE 如果存在 product_pivot ;

    删除 TABLE 如果存在 product_test ;

    创建 TABLE product_pivot ( product_id 情报, image1 VARCHAR(50), image2 VARCHAR(50), image3 VARCHAR(50), image4 VARCHAR(50), image5 VARCHAR(50), image6 VARCHAR(50), image7 VARCHAR(50) ) ;

    创建 TABLE product_test(product_id INT,图像 VARCHAR(50)) ;

    插入 product_test 值(12655,'abc4.gif') ;

    插入 product_test 值(12655,'7hgd.gif') ;

    插入 product_test 值(12655,'8jd.gif') ;

    插入 product_test 值(12656,'ej6.gif') ;

    插入 product_test 值(12656,'99j.gif') ;

    插入 product_test 值(12656,'23n.gif') ;

    插入 product_test 值(12657,'23a.gif') ;

    SELECT CONCAT('INSERT INTO product_pivot ', c.col, '价值观', v.dta) 从 ( SELECT product_id , GROUP_CONCAT(col) col 从 ( SELECT p.product_id , CONCAT('(product_id', ',', GROUP_CONCAT(不同的连接('image_', @sql := @sql + 1)), ')') 列 , ( SELECT @sql := 0) r 从 product_testp 分组 p.product_id) x 分组 product_id) c 加入 ( SELECT product_id , GROUP_CONCAT(dta) dta 从 ( SELECT p.product_id , CONCAT('(', p.product_id, ',', GROUP_CONCAT(DISTINCT CONCAT('"', p.image, '"')), ')') dta 从 product_testp 分组 p.product_id) x 分组 product_id) v ON c.product_id = v.product_id ;