繁体   English   中英

MySQL:在“WHERE”中使用字符串<column_name>在<values> “ 询问</values></column_name>

[英]MySQL: Using a string in a "WHERE <column_name> IN <values>" Query

亲爱的 Stackoverflow 会员,

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

我需要使用标准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);

function 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 中完成。一位同事给我的建议之一是使用临时表, 来写中间结果,但我不确定我是否看到它是如何实现和/或工作的。 此外,我不认为如果没有很多循环、substring 东西和其他丑陋的东西,它就不会轻易完成,但我会得到纠正。

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

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

Select 您的 where 子句中的子查询可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM