【问题标题】:Loop through a possible comma separated string in MySQL循环遍历 mySQL 中可能的逗号分隔字符串
【发布时间】:2012-05-28 15:15:54
【问题描述】:

如何在 MYSQL 中循环使用逗号分隔的字符串。

这就是我想要的

 select exp from expertise where user_name = 'userName';

 if exp != null then
     LOOP
       INSERT into table T1(exp1) VALUES(exp)
     UNTIL NO COMMA FOUND
 END IF;

我该怎么做?

【问题讨论】:

  • 我不完全确定您所说的“未找到逗号”是什么意思。你能澄清一下吗?另外,我认为您想要 REPEAT 而不是 LOOP:dev.mysql.com/doc/refman/5.0/en/repeat-statement.html
  • 这个查询没有意义。什么是exp1?为什么要将用户名多次插入单独的表中?为什么用户名字段包含 CSV?
  • 我如何使用 REPEAT.. 我想遍历一个字符串(逗号分隔),并将其插入到表中。因此,如果有 10 个单词,用逗号分隔,则必须将 10 条记录插入 DB。此外,当没有找到逗号时,它必须停止插入表格
  • 你不应该首先存储一个逗号分隔的列表。如果你规范你的桌子设计,这个杂物就没有必要了
  • 我知道 :-( .. 但我需要添加用户在屏幕上输入的内容,这将是一个逗号分隔的字符串。我将它添加到临时表中,所以我可以进行搜索在此,然后将被删除。我只想知道如何循环通过逗号分隔的字符串

标签: mysql


【解决方案1】:

A 计划:

编写一个可以解析字符串并运行 INSERT 语句的存储过程。

B计划:

从 'exp' 值构建 INSERT 语句字符串,并使用准备好的语句来执行语句。


示例:

假设我们有一个字符串 - 'apple,cherry,strawberry'。我们必须生成这样的 INSERT 语句 - INSERT INTO table_name VALUES('apple'),('cherry'),('strawberry')

-- build a query
SET @table_name = 'table1';
SET @words = 'apple,cherry,strawberry';
SET @query = CONCAT('INSERT INTO ', @table_name, ' VALUES(\'',  REPLACE(@words, ',', '\'),(\''), '\')');

-- run the query
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

【讨论】:

  • 如果字符串中有5个以逗号分隔的单词,则需要向表中插入5条记录,这5个单词。我需要遍历这个字符串,如果它存在
  • 对不起,我意识到,我不知道会有多少插入。在上面的例子中,有一个固定的数字 = 3。我可以有一个未知的数量。我如何确定这一点?
  • 没关系。只需检查结果查询长度。查询的大小不应超过max_allowed_packet
  • 我迷路了 :-( .. 在您的示例中语法正确,因为我无法正确理解它.. table_name 也是我这边的一个变量,所以我使用@table_name
  • 没问题。我已经改变了答案。您也可以编写'SELECT @query'来查看结果查询。
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 2011-03-02
  • 2016-09-04
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
相关资源
最近更新 更多