2013-04-26 109 views
16

我建立一個簡單的搜索算法,我想打破我字符串用空格,搜索就可以了我的分貝,像這樣多個值這可能嗎?SQL搜索在同一領域

在此先感謝

+0

絕對 - 這是可能的,使用的所有的時間。 如果您需要程序員爲您編寫代碼,那麼有許多網站。 LinkedIn例如。但是,對於本網站,請提出有關特定代碼的問題,而不是要求爲您編寫代碼。顯示你已經嘗試了什麼,以及你發現了什麼......等等。 – Dave 2013-04-26 15:33:20

+0

謝謝,我不想讓我的代碼爲我寫,只是爲了知道如何去做。 我的代碼看起來沒有像我上面寫的那個。 – 2013-04-26 15:39:27

回答

30

是的,你可以使用SQL IN操作搜索多個絕對值:

SELECT name FROM products WHERE name IN ('Value1', 'Value2', ...); 

如果你想使用LIKE您將需要使用OR代替:

SELECT name FROM products WHERE name LIKE '%Value1' OR name LIKE '%Value2'; 

使用AND(如您所嘗試)要求所有條件都爲真,使用OR要求至少有一個爲真。

+0

雖然這回答了您的問題,但您可能希望比我們的任一解決方案更復雜,搜索「OR」但首先顯示最相關(最匹配)的結果。 – 2013-04-26 15:39:27

+0

我正在使用SQL Server並試圖做同樣的事情。但是,我將搜索字符串作爲參數傳遞給存儲過程。如何根據空格拆分搜索字符串參數,然後在用戶搜索之前不知道值時將所有「LIKE'%Value1%或.....」添加到where子句中? – 2016-10-26 16:57:59

+0

我很確定,在大多數簡單情況下,AND和AND是正確的搜索。如果用戶不喜歡打字,他們可能希望在90%的時間內顯示結果。想想谷歌搜索:[+「bob」+「希望」],這絕對是無用的'OR'搜索。並請原諒谷歌在半實用搜索中完全荒謬的引用要求。此外,'AND'是難以獲得的獨特功能,而'OR'則可以運行2次搜索並查看是否有人受到攻擊。 – ebyrob 2017-03-17 15:22:52

4

試試這個

使用UNION

$sql = ''; 
$count = 0; 
foreach($search as $text) 
{ 
    if($count > 0) 
    $sql = $sql."UNION Select name From myTable WHERE Name LIKE '%$text%'"; 
    else 
    $sql = $sql."Select name From myTable WHERE Name LIKE '%$text%'"; 

    $count++; 
} 

使用WHERE IN

$comma_separated = "('" . implode("','", $search) . "')"; // ('1','2','3') 
$sql = "Select name From myTable WHERE name IN ".$comma_separated ;