You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Magento 2 MySQL数据库的CSV字段中去除重复值

处理Magento 2 MySQL中CSV格式ID列表的重复值问题

可以通过自定义MySQL函数实现CSV列表的去重,再批量更新数据,具体步骤如下:

1. 创建去重函数

先创建一个用于拆分CSV、去重后重新合并的函数:

DELIMITER //
CREATE FUNCTION deduplicate_csv(csv_text VARCHAR(255)) 
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
    DECLARE result VARCHAR(255) DEFAULT '';
    DECLARE current_id VARCHAR(10);
    DECLARE remaining_text VARCHAR(255) DEFAULT csv_text;
    
    -- 清理末尾多余的逗号
    IF RIGHT(remaining_text, 1) = ',' THEN
        SET remaining_text = LEFT(remaining_text, LENGTH(remaining_text) - 1);
    END IF;
    
    WHILE LENGTH(remaining_text) > 0 DO
        -- 提取单个ID
        IF INSTR(remaining_text, ',') > 0 THEN
            SET current_id = LEFT(remaining_text, INSTR(remaining_text, ',') - 1);
            SET remaining_text = RIGHT(remaining_text, LENGTH(remaining_text) - INSTR(remaining_text, ','));
        ELSE
            SET current_id = remaining_text;
            SET remaining_text = '';
        END IF;
        
        -- 仅添加未在结果中出现过的ID
        IF INSTR(CONCAT(',', result, ','), CONCAT(',', current_id, ',')) = 0 THEN
            SET result = IF(result = '', current_id, CONCAT(result, ',', current_id));
        END IF;
    END WHILE;
    
    RETURN result;
END //
DELIMITER ;

2. 批量更新数据

假设存储属性的表是catalog_product_entity_varchar(Magento 2默认产品属性表),执行更新语句:

UPDATE catalog_product_entity_varchar
SET `value` = deduplicate_csv(`value`)
WHERE attribute_id = 145 AND store_id = 0;

注意事项

  • 操作前必须备份数据库,防止数据意外丢失
  • 如果你的value字段长度超过255,需同步调整函数中VARCHAR的长度(比如改为VARCHAR(1024))
  • 若ID的长度超过10,需调整函数中current_id的定义长度
  • 更新后可执行以下语句验证结果:
SELECT value_id, entity_id, `value` FROM catalog_product_entity_varchar WHERE attribute_id = 145 AND store_id = 0;

内容的提问来源于stack exchange,提问作者Michael Meyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:27:50