当前位置: 首页 > 知识库问答 >
问题:

如何在MySQL中模拟数组变量?

羊越
2023-03-14

MySQL似乎没有数组变量。我应该使用什么来代替?

似乎有两种选择建议:集合类型标量表和临时表。我所联系的问题表明了前者。但是,使用这些变量而不是数组变量是一种好的做法吗?或者,如果我使用集合,那么基于集合的习语与foreach等价的是什么?

共有3个答案

皇甫飞飙
2023-03-14

尝试使用MySql的FIND\u IN\u SET()函数,例如。

SET @c = 'xxx,yyy,zzz';

SELECT * from countries 
WHERE FIND_IN_SET(countryname,@c);

注意:如果使用CSV值传递参数,则不必在StoredProcedure中设置变量。

常永长
2023-03-14

您可以在MySQL中使用WHILE循环实现这一点:

SET @myArrayOfValue = '2,5,2,23,6,';

WHILE (LOCATE(',', @myArrayOfValue) > 0)
DO
    SET @value = ELT(1, @myArrayOfValue);
    SET @myArrayOfValue= SUBSTRING(@myArrayOfValue, LOCATE(',',@myArrayOfValue) + 1);

    INSERT INTO `EXEMPLE` VALUES(@value, 'hello');
END WHILE;

编辑:或者您可以使用UNION ALL执行此操作:

INSERT INTO `EXEMPLE`
(
 `value`, `message`
)
(
 SELECT 2 AS `value`, 'hello' AS `message`
 UNION ALL
 SELECT 5 AS `value`, 'hello' AS `message`
 UNION ALL
 SELECT 2 AS `value`, 'hello' AS `message`
 UNION ALL
 ...
);
巫马化
2023-03-14

好吧,我一直在使用临时表而不是数组变量。不是最好的解决方案,但它有效。

请注意,您不需要正式定义它们的字段,只需使用SELECT:

DROP TEMPORARY TABLE IF EXISTS my_temp_table;
CREATE TEMPORARY TABLE my_temp_table
    SELECT first_name FROM people WHERE last_name = 'Smith';

(另请参阅在不使用创建表的情况下从select语句创建临时表。)

 类似资料:
  • 问题内容: 这似乎是MySQL没有数组变量。我应该怎么用呢? 似乎提出了两种选择: set-type标 量表 和 临时表 。我链接的问题暗示了前者。但是,使用这些变量而不是数组变量是一种好习惯吗?或者,如果我使用集合,基于集合的成语等效于什么? 问题答案: 好吧,我一直在使用临时表而不是数组变量。不是最大的解决方案,但它可以工作。 请注意,您不需要正式定义它们的字段,只需使用SELECT创建它们:

  • 问题内容: 我有一些程序在评估病情后想得到某种确认。 例如,pusedocode就像 我应该如何在MySQL中做到这一点? 问题答案: 如果您不想两次将文本用作列标题和值,请使用以下stmt!

  • 问题内容: 我正在使用felixge的客户端。我没有使用ORM。 我正在用Vows进行测试,并希望能够模拟我的数据库(可能使用Sinon)。由于除之外我本身还没有DAL ,因此我不确定如何执行此操作。我的模型大多是带有许多吸气剂的简单CRUD。 关于如何实现此目标的任何想法? 问题答案: 使用sinon,您可以在整个模块上放置一个模拟或存根。例如,假设模块具有一个功能: ,是您期望的输入。是您期望

  • 我想知道你能在MySQL中创建一个数组变量吗?我知道你可以创建一个普通变量,比如so

  • 问题内容: 我正在使用felixge的客户端。我没有使用ORM。 我正在用Vows进行测试,并且希望能够使用Sinon来模拟我的数据库。由于除之外我本身还没有DAL ,因此我不确定如何执行此操作。我的模型大多是带有很多吸气剂的简单CRUD。 关于如何做到这一点的任何想法? 问题答案: 使用sinon,您可以在整个模块上放置一个模拟或存根。例如,假设模块具有一个功能: ,是您期望的输入。是您期望的输

  • 我知道Dan North设计BDD的意图之一是将词汇表从复杂的测试域中移开。然而,在实现由外到内的方法时,我们似乎仍然需要对模仿行为(或者,如果您愿意的话)有一些了解。North在这个视频中建议,如果我从最外层的域对象开始,然后向内工作,我会在发现合作者时模仿它们,然后用适当的实现替换它们。所以最后,我以一组端到端测试结束。 Martin Fowler在这篇博客文章中定义了TDD的两个阵营:“古典