2013-02-02 93 views
3

做到這一點查詢mysql的select語句組合一對多

SELECT * FROM `table` WHERE `column` like '%abc% %xcdb%' OR `column` like '%abc% %dfhj%' 

這裏的第一變量保持不變,但對於第二個變化讓說,最好的辦法的10至20 所以一個更好更快的數組到repalce這種迭代(column等)

表設計

<table > 
<tr> 
    <td>id</td> 
    <td>column</td> 
    <td>other</td> 
</tr> 
<tr> 
    <td>1;</td> 
    <td>fsyd,**abc**,jgd,**xcdb**,sdfr</td> 
    <td>tom</td> 
</tr> 
<tr> 
    <td>2</td> 
    <td>wer,tyuy,dhjd,dbhd</td> 
    <td>john</td> 
</tr> 
<tr> 
    <td>3;</td> 
    <td>asy,gtyt,bnhhs,**abc**,bgy,trdcv,**dfhj**</td> 
    <td>colin</td> 
</tr> 
    <tr> 
    <td>4</td> 
    <td>wer,**xcdb**,dhjd,**abc**,dbhd</td> 
    <td>john</td> 
</tr> 
</table>  

此查詢還給ID的結果(1和3),但不4一它會檢查序列。 這是一個正確的選擇語句,並給出我想要的結果,但我只是要求一個更好的方法來做到這一點。

+2

您可以加入你的意思用一個示例表和期望的結果是什麼短的例子嗎? –

+0

也許這個問題鏈接可能對你有幫助。 http://stackoverflow.com/questions/2514548/how-to-search-multiple-columns-in-mysql –

+0

'SELECT * FROM table WHERE列like'%abc%AND(column like'%xcdb%'OR列'%dfhj%');'?假設'%xcdb%'出現的次數多於''%dfhj%''。 – SparKot

回答

0

根據你的要求和訂購事宜的含義,你有兩個選擇:

  1. 通過一堆LIKE查詢循環(因爲你正在做的)
  2. 正則表達式的

我的理解是,MySQL中的正則表達式有顯着的性能下降,但我無法親自驗證。如果需要,我會嘗試使用正則表達式發佈您的查詢示例,並且我有幾分鐘時間來測試。

應該是這個樣子:

SELECT * FROM `table` WHERE `column` REGEXP('.*abc.*((xcdb)|(dfhj).*)') 

看到,有證據在這裏SQLFiddle:http://sqlfiddle.com/#!2/8cd26/1