【问题标题】:Splitting mysql value into unknown number of parts将mysql值拆分为未知数量的部分
【发布时间】:2013-11-03 17:43:13
【问题描述】:

我已经获得了一个 mySQL 数据库来重组为 OpenCart 安装。

我已经提取了大部分数据,但在旧网站中,“产品类别”已全部放在一个列中

|228|243|228|239|228| 或者 |88| 或者 |88|243|

所以我不知道任何特定记录中有多少。

我不想使用 php 函数来提取它,因为我正在使用 SQL 查询手动将数据提取到新数据库中。

一个额外的复杂性是我必须在 products_to_categories 中为列中的每个值创建一个新行 - 我不介意多步骤过程,我不希望通过单个查询来执行此操作 - 我我希望避免重新输入所有数据。

我知道这与MySQL Split String 相似,但我不认为这是重复的,因为它不能完全回答我的问题,因为列中可能有任意数量的值 - 而不仅仅是 2。

[编辑] 我尝试了 common_schema,但以我目前的技能水平,我发现很难得到我想要的结果,但我将来肯定会使用它。作为记录,这是最接近我的解决方案 - Can you split/explode a field in a MySQL query?

【问题讨论】:

    标签: mysql opencart


    【解决方案1】:

    我推荐的一个选项是使用common_schema,特别是函数get_num_tokens()split_token(),这会有所帮助。

    这里有一个简单的使用示例,您可以根据自己的解决方案进行调整:

    /* CODE FOR DEMONSTRATION PURPOSES */
    
    /* Need to install common_schema - code.google.com/p/common-schema/ */ 
    
    /* Procedure structure for procedure `explode1` */     
    
    /*!50003 DROP PROCEDURE IF EXISTS  `explode1` */;
    
    DELIMITER $$
    
    CREATE PROCEDURE `explode1`(str varchar(65500), delim VARCHAR(255))
    BEGIN
        DECLARE _iteration, _num_tokens INT UNSIGNED DEFAULT 0;
        DROP TEMPORARY TABLE IF EXISTS `temp_explode`;
        CREATE TEMPORARY TABLE `temp_explode` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `word` VARCHAR(200), PRIMARY KEY (`id`));
        SET _num_tokens := (SELECT `common_schema`.`get_num_tokens`(str, delim));
        WHILE _iteration < _num_tokens DO
            SET _iteration := _iteration + 1;
            INSERT INTO `temp_explode` (`word`) SELECT `common_schema`.`split_token`(str, delim, _iteration);
        END WHILE;
        SELECT `id`, `word` FROM `temp_explode`;
        DROP TEMPORARY TABLE IF EXISTS `temp_explode`;
    END $$
    
    DELIMITER ;
    
    /* TEST */
    CALL `explode1`('Lorem Ipsum is simply dummy text of the printing and typesetting', CHAR(32));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 2018-10-08
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2016-07-22
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多