MySQL:在 "WHERE <column_name> IN <values>"查询中使用字符串

标签 mysql string

亲爱的 Stackoverflow 成员(member),

我希望我没有忽略一些明显的东西,但到目前为止我还没有找到解决我的问题的方法。

我需要使用标准 WHERE ... IN ( 1, 2, 3, 4 ) 从表中获取某些列值条款。 然而,问题是 WHERE 子句中的值必须根据存储在另一个表的列中的值动态构建,类似于 'a:3:{i:0;s:3:"153";i:1;s:3:"211";i:2;s:3:"226";}'。 .在此示例中,要提取的值是 153、211 和 226,这导致子句 WHERE <column> IN ( 153, 211, 226 ) .此字符串的格式始终相同,但值的数量可能会有所不同。

我可以从这个字符串中获取实际值,使用一些 RegExp 技巧

SELECT value from `column` WHERE <non-scary WHERE clause> INTO @valueString;
SET @IDs =  CONVERT(PREG_REPLACE('/[^\"]+\"([^\"]+)\".*/', '$1', PREG_REPLACE( '/\"\;[^\"]+\"/', '\,\ ', @valueString  )) USING UTF8);

函数 PREG_REPLACE 是一个 UDF,来自 [http://www.mysqludf.org/lib_mysqludf_preg/],这是人们在寻找 RegExp/Replace 函数时通常推荐的函数。 CONVERT()在那里,因为 PREG_REPLACE 给我返回一个 blob,而不是一个可读的字符串。

运行这些查询后,运行

SELECT @IDs;

给我一​​个值列表,看起来像(在这个例子中)153, 211, 226 .

现在的问题是,我如何才能说服 MySQL 在 WHERE ... IN 中使用这些值?条款。天真的查询

SELECT * FROM `table` WHERE id IN  ( SELECT @IDs );   

不会这样提示,而只会返回列表中第一个值的结果,而忽略其他值(我必须承认,我真的不明白它为什么这样做)。

很明显,这在 Ruby、Python、Perl 等语言中都是微不足道的,但出于技术原因,它必须严格在 SQL 中完成。一位同事给我的建议之一是使用临时表来写入中间结果,但我不确定我是否看到它是如何实现和/或工作的。此外,我不认为如果没有大量循环、子字符串内容和其他丑陋之处,就无法轻松完成,但我希望得到纠正。

我希望我的问题的描述或多或少是清楚的。我将不胜感激任何见解、想法和提示。

提前感谢您的时间和思想分享,Constantijn Blondel,Leipzig DE

最佳答案

在您的 where 子句中选择一个子查询,它将正常工作。

关于MySQL:在 "WHERE <column_name> IN <values>"查询中使用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085267/

相关文章:

字符串的 Python 文件接口(interface)

mysql - laravel where子句中的子查询

C# 将 Dapper POCO 和 Dapper.Fluent EntityMap 作为参数传递

php - Doctrine2 连接 native 查询与不同的表

c - 为什么使用正确的参数类型调用 strtok() 时会失败?

java - 循环列表以查找特定值

Java - 无法从元素转换为字符串

mysql - 如何在一个查询中执行多个不同的计数聚合

php - [MySql]如何从一个表复制一行到另一个表并填充额外的列?