2014-12-02 78 views
0

我有一個名爲column_A和column_B 2列的表。SQL搜索喜歡或包含

此表中的一行包含column_A中的值AAA和column_B中的值BBB。

如果我要尋找的AAA或BBB與

SELECT * FROM table WHERE column_A LIKE '%AAA%' OR column_B LIKE '%AAA%'; 

SELECT * FROM table WHERE column_A LIKE '%BBB%' OR column_B LIKE '%BBB%'; 

我得到一個結果。

但是,如果我選擇'%AAA BBB%'或'%AAA xyz%',我就沒有結果。

我搜索的值來自搜索表單。只要用戶只輸入BBB或AAA,一切都很好,當他使用AAA或BBB和其他搜索結合時,搜索功能無法工作。

我該如何解決這個問題?我是否需要拆分搜索詞喜歡這裏提到的:http://www.iamcal.com/publish/articles/php/search/

+0

您需要拆分搜索詞或使用全文搜索。 – 2014-12-02 12:14:09

+0

您可以參考http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html全文搜索鏈接 – 2014-12-02 12:15:32

+0

'%AAA xyz%表示您正在尋找'AAA xyz'+有些東西沒有'AAA'或'xyz' – 2014-12-02 12:17:57

回答

0

既然你已經標記了PHP的話,我可以建議是這樣的:

<?php 
$res ="AAA BBB CCC";// your input from use 
$res=explode(' ', $res); 
$sql="SELECT * FROM table where column_A"; 
$flag=false; 
for($i =0;$i< sizeof($res);$i++){ 

    if(!$flag){ 
     $flag=true; 
     $sql .=" like '%".$res[$i]."%'"; 
    }else{ 

     $sql .=" or like '%".$res[$i]."%'"; 
    } 


} 
echo $sql;// resultant sql need not to echo only to show 
+0

這與我的解決方案非常相似,因此您可以獲得我的投票。謝謝! – pixi 2014-12-02 16:54:55

2

您就可以使用下面的正則表達式做搜索無論是在column_A AAA或BBB:

SELECT * FROM table WHERE column_A REGEXP '.*[A|B]{3}.*$' 
0

感謝所有的意見,我終於解決了這樣的:

$string = $_GET['searchterm']; 

$words = EXPLODE(" ",$string); 

FOR($i=0;$i<count($words);$i++){$SQLOPTION .= "AND CONCAT(column_A,column_B) LIKE '%".$words[$i]."%'";} 

,然後將$ SQLOPTION值添加到我的查詢中。