2013-05-18 81 views
2

我有這樣的子查詢工作完美:MySQL的選擇其中

select GROUP_CONCAT(zone SEPARATOR ', ') from typeofru where id in (5,7) /*This works good*/ 

我的問題是5和7一起VARCHAR列(「5,7」),並不能使它工作

select GROUP_CONCAT(zone SEPARATOR ', ') from typeofru where id in ('5,7') /*This is not working */ 

如何我可以投(「5,7」)的值類型,以使其工作

最後的查詢,我需要用的就是這個,但似乎並不工作:

select name, (select GROUP_CONCAT(zone SEPARATOR ', ') from typeofru where id in (typeofru_ids)) from deviceru where device_id=5 

回答

3

如果字符串str是在由N的 字符串列表strlist使用FIND_IN_SET()

WHERE FIND_IN_SET(ID, '5,7') > 0 

返回的1到N的範圍內的值子串。字符串列表是一個 字符串,由以「,」字符分隔的子字符串組成。如果 第一個參數是一個常數字符串,第二個是 類型SET,的一列中的FIND_IN_SET()函數被優化爲使用位算術返回0如果str不在strlist或如果strlist是空字符串。 返回NULL如果任一參數爲NULL。如果第一個參數包含一個逗號(「,」)字符,則該函數不能正常工作 。

作爲一個教訓,不要存儲由逗號分隔的值。

在之前和一個逗號後,你需要先更換空間有空間的情況下,

WHERE FIND_IN_SET(ID, REPLACE(' 5 , 7', ' ','')) > 0 
+0

完美,它的工作原理,謝謝 –

+0

歡迎您':)' –