2017-03-21 42 views
0

是的,這是一個已被打死的問題,但我相信它有點不同。MySQL字符串'包含'功能

請考慮這個MySQL表test

enter image description here

所需結果集是:

enter image description here

在換句話說,如何可以在第一3條記錄(id的1,2, 5)選用恰好這個字符串 - '電影,娛樂'和單個查詢?也就是說,A如何與上面的字符串進行比較,並且如果即使單字'匹配,它也會返回記錄?

曾嘗試以下:

  • SELECT * FROM test WHERE A LIKE "%Cinema, Entertainment%"
  • SELECT * FROM test WHERE INSTR(A, 'Cinema, Entertainment') > 0

兩個只返回的第一個記錄,做一個精確匹配。

SELECT * FROM test WHERE A LIKE '%Cinema%' OR A LIKE '%Entertainment%'確實有效,但我不想標記可用的字符串。該字符串也可以有多個CSV

非常新的正則表達式,似乎無法形成正確的查詢。

見過這些很酷的答案,:

...但仍在掙扎。

在此先感謝!

+0

你意識到你使用了錯誤的數據結構,對不對? – shmosel

+0

我覺得你需要去全文搜索 –

+0

@shmosel,謝謝!你的意思是在一列中不應該有'CSV'? –

回答

1

以下查詢將有助於此要求。但是您需要確保A列FULLTEXT已編入索引。

ALTER TABLE `test` ADD FULLTEXT(`A`); 

SELECT * FROM `test` WHERE (match(A) against('Cinema, Entertainment' IN BOOLEAN MODE)); 
+0

謝謝@Naga。 'SELECT * FROM test WHERE match(A)against('Cinema,Entertainment'IN BOOLEAN MODE)'工作。 –

0

使用mysql FIND_IN_SET函數可以得到您想要的結果。

select * from `test` where find_in_set('Cinema',`A`) OR find_in_set('Entertainment',`A`); 

Demo

+0

謝謝!但正如我所說的,我不想說出可用的字符串「電影,娛樂」。然而,這是一個新的學習。 –