【问题标题】:mysql split comma values to a single new column possible?mysql 可以将逗号值拆分为单个新列吗?
【发布时间】:2018-02-13 15:32:33
【问题描述】:

我正在从 prestashop 为 magento2 导出我的产品,但我在 prestashop 中的一些产品有多个图像(不是全部)

这是我现在使用的代码。

select ps_product.id_product AS 'sku', ps_product.upc, ps_product.price, ps_product.weight, ps_product.date_add AS 'created_at',
GROUP_CONCAT(DISTINCT(CONCAT('/img/p/',
IF(CHAR_LENGTH(ps_image.id_image) >= 5, 
CONCAT(
SUBSTRING(ps_image.id_image, -5, 1),
'/'),
''),
IF(CHAR_LENGTH(ps_image.id_image) >= 4, CONCAT(SUBSTRING(ps_image.id_image, -4, 1), '/'), ''),
IF(CHAR_LENGTH(ps_image.id_image) >= 3, CONCAT(SUBSTRING(ps_image.id_image, -3, 1), '/'), ''),
IF(CHAR_LENGTH(ps_image.id_image) >= 2, CONCAT(SUBSTRING(ps_image.id_image, -2, 1), '/'), ''),
IF(CHAR_LENGTH(ps_image.id_image) >= 1, CONCAT(SUBSTRING(ps_image.id_image, -1, 1), '/'), ''),
ps_image.id_image,
'.jpg')) SEPARATOR ', ') AS 'base_image',
ps_stock_available.quantity AS 'qty', ps_product_lang.description, 
ps_product_lang.name,
ps_product_lang.description_short AS 'short_description', ps_product_lang.link_rewrite AS 'url_key',
ps_product_lang.meta_title, ps_product_lang.meta_description,
'simple' AS product_type, 'Default' AS attribute_set_code, 'All' AS categories
from ps_product
INNER JOIN ps_product_lang ON ps_product.id_product=ps_product_lang.id_product
INNER JOIN ps_stock_available ON ps_product.id_product=ps_stock_available.id_product
INNER JOIN ps_image ON ps_product.id_product=ps_image.id_product
GROUP BY ps_product.id_product
ORDER BY ps_product.id_product;

到目前为止,base_image 大部分都有一个,但在 1600 种产品中,我们大约有 200 种产品具有多于一张 magento 翻转的图像。

我已经阅读了 substring_index,但所有示例都是针对它们作为每个值的新列。我想要完成的是将超过一个值的任何内容拆分为名为“additional_images”的第二列。

示例:1.jpg、2.jpg、3.jpg

1.jpg 转到 base_image 和 2.jpg 和 3.jpg 转到 Additional_images 作为逗号值,就像他们在哪里一样。

任何帮助都会很棒!

【问题讨论】:

标签: mysql sql


【解决方案1】:

这是一种方法:

select substring_index(images, ',', 1) as first_image,
       trim(leading ',' from
            replace(images, substring_index(images, ',', 1), '')
           ) as remaining_images

我认为replace() 是获取其余图像(如果有的话)的最简单方法。

嗯。 . .这样更安全:

select substring_index(images, ',', 1) as first_image,
       (case when images like '%,%'
             then substr(images, instr(images, ',') + 1)
        end) as remaining_images

【讨论】:

  • 我可以在脚本中的图像逻辑之后执行此操作吗?还是我需要用它来构建它?
猜你喜欢
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2015-10-06
相关资源
最近更新 更多