2013-07-15 107 views
3

考慮我有這樣的表。使用逗號分隔值選擇mysql列

 
+-------------+---------------+----------------+---------------+ 
+  id  + column 1 + column 2 + column 3 + 
+-------------+---------------+----------------+---------------+ 
+  1  +  values +  values  + a, b, c, d, e + 
+-------------+---------------+----------------+---------------+ 

我的查詢,可就是這樣

SELECT * FROM table WHERE column 1 = 'values' AND column 3 = '$variable' 

的$變量可以是從什麼到e

有沒有辦法使用的查詢選擇我想要的行的方法嗎?

+3

聞起來像壞的數據庫架構。 – Leri

+1

你需要使用一個類似的子句。 –

+0

如果它是企業中的遺留代碼,那麼更改數據庫結構可能會很複雜,但如果您想查詢某個字段的子集,則可能會考慮將第四列(3)拆分爲許多其他關聯關係。 –

回答

4

使用FIND_IN_SET() - 爲MySQL內置函數來搜索字符串

SELECT * 
FROM tableName 
WHERE column 1 = 'values' and FIND_IN_SET('a',column 3)>0 
+0

能否請你提供一個樣本,如我的查詢 –

+0

使用樣本鏈接 –

+0

你正在使用的是什麼> FIND_IN_SET() –

1

使用此查詢SELECT * FROM表,其中列1 ='價值'和第3列如'%$價值E&」

+0

感謝您的幫助隊友。我認爲我可以使用FIND_IN_SET會更好,我的情況下 –

3

試試這個

SELECT * 
FROM table 
WHERE FIND_IN_SET('$variable', column 3) 
2

MySQL的功能FIND_IN_SET可以在一組字符串搜索只爲一個字符串。第一個參數是一個字符串,因此無法將逗號分隔的字符串解析爲字符串(根本不能在SET元素中使用逗號!)。第二個參數是一個SET,它反過來由逗號分隔的字符串表示,因此您希望find_in_set('a,b,c','a,b,c,d')能正常工作,但它肯定會' t根據定義在任何SET中查找字符串'a,b,c' - 它包含逗號。

SELECT * FROM TABLENAME WHERE列1 = '值' 和 FIND_IN_SET( '一個',欄3)

+0

我明白了,謝謝:) –