2013-07-27 67 views
0

我需要從具有WHERE條件與多個LIKE組合的表中讀取行,如何從多個類似組合的MySQL數據庫中獲取行?

我的意思是,例如,我在其中有兩行

1. 'abc def hij klm' 
2. 'opq rst uvw xyz' 

我的搜索文本的表中的字段descriptionabc rst。所以我需要一個具有LIKE條件的查詢,它必須產生兩行,因爲第一行包含字符串abc,第二行包含rst。我知道我可以在兩個LIKE條件之間使用OR,但如果搜索文本太長,我應該怎麼做?因爲它有更多的單詞?

+1

用空格分解搜索文本並繼續。或者如果你嘗試過任何東西后發佈。 – Rikesh

+0

你究竟需要什麼? –

+0

@Rikesh ..我知道我可以爆炸搜索文本,並使用OR條件,是否有另一種方式來處理此.. –

回答

0

這可能是一個有點痛苦,但要做到這一點的一種方式是像和substring_index()

where concat(' ', description, ' ') like concat('% ', substring_index(@SearchString, ' ', 1), ' %') and 
     concat(' ', description, ' ') like concat('% ', substring_index(substring_index(@SearchString, ' ', 2), ' ', -1), ' %') and 
     concat(' ', description, ' ') like concat('% ', substring_index(substring_index(@SearchString, ' ', 3), ' ', -1), ' %') and 
     concat(' ', description, ' ') like concat('% ', substring_index(substring_index(@SearchString, ' ', 4), ' ', -1), ' %') 

嵌套substring_index()返回列表的第n項。

如果您正在尋找一個真實代碼的代碼只是在description字段中一起出現,那麼您的數據庫設計就會不正確。每個代碼需要一個單行關聯表。

如果描述實際上是文本描述,那麼您可能確實需要全文索引。這將使用match . . . against解決您的問題。

相關問題