簡體   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