2013-02-23 68 views
1

我一直在閱讀教程,並沒有學到什麼新東西。我有一張顧客的桌子。客戶的名字和姓氏存儲在單獨的列中。我想編寫一個查詢,可以按名稱搜索客戶,無論是第一個,最後一個還是BOTH。MySQL LIKE運營商和通配符

下面是我得到了什麼:

$queryyy = " 
    SELECT * 
    FROM `customers` 
    WHERE 
     `first_name1` LIKE '".mysql_real_escape_string($_GET['custname'])."%' 
     OR `last_name1` LIKE '%".mysql_real_escape_string($_GET['custname'])."' 
     AND `status` = 'active' 
    LIMIT 6 
"; 

如果我想找到「林賽·湯普森」,我可以查詢「林賽」,或爲「湯普森」,並得到我想要的結果,但如果我查詢「lindsay thompson」,我什麼也沒得到。

我覺得我錯過了通配符,或者沒有正確使用它們。是否有人可以解釋這對我和我糾正..查詢

感謝

+0

你想要的精確匹配?爲什麼你''%有? – zerkms 2013-02-23 08:07:57

+0

我不一定需要完全匹配,問題是我沒有得到任何結果 – 2013-02-23 08:11:04

+1

你設置它的方式,它不會工作。在空格處爆炸字符串,並分別用通配符匹配第一個和最後一個名字(例如'firstname LIKE'lind%'或lastname LIKE'thomp%'') – Supericy 2013-02-23 08:12:13

回答

4

通配符引入表達「任意數目的字符」(在%情況下)。

所以

col LIKE '%foo' 

將匹配foo價值和barfoo價值。

你想要的其實是相反的 - 你需要連接兩列,並檢查它是否等於要求,如:

CONCAT(first_name, ' ', last_name) = 'foo bar' 
+0

爲什麼他需要在搜索查詢中這麼做?這將如何幫助他僅以名字或姓氏搜索客戶? – 2013-02-23 08:25:03

+0

@IgorJerosimić:「他爲什麼要在搜索查詢中這麼做?」 - - 爲什麼不?這個問題是關於邏輯,而不是優化。 「而這將如何幫助他僅以名字或姓氏搜索客戶?」 ---我不知道,我只是回答了一個特定的問題(請參閱「如果我想找到」Lindsay Thompson「,我可以查詢」lindsay「或」Thompson「並獲得我想要的結果,但是如果我查詢「lindsay thompson」我什麼都沒收到。「) – zerkms 2013-02-23 08:27:03

+0

他的請求是」我想寫一個查詢,可以按姓名搜索客戶,無論是第一個,最後一個還是兩個。「。 – 2013-02-23 08:27:53

2

一個通配符%將匹配任何數目的字符。若要使用頁面http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html D%i%中顯示的示例將匹配David

您遇到的問題是,您正在搜索LindsayThompson%Lindsay Thompson,即搜索任意數量的字符後跟全名的任一名稱。所以這永遠不會匹配。

一種選擇是在兩個名稱的連接字符串上運行查詢。

SELECT *從客戶WHERE CONCAT(first_name1, '',last_name1)LIKE '% 「.mysql_real_escape_string($ _ GET [ 'CUSTNAME'])。」 %' AND status = '活性' LIMIT 6" ;

0

試試這個,希望它會幫助你

$queryyy = "SELECT * FROM `customers` 
      WHERE (`first_name1` LIKE '".mysql_real_escape_string($_GET['custname'])."%' 
      OR `last_name1` LIKE '%".mysql_real_escape_string($_GET['custname'])."') 
      or concat(`first_name1`,' ',last_name1`) 
      LIKE'".mysql_real_escape_string($_GET['custname'])."%' 
      AND `status` = 'active' LIMIT 6"; 
+0

有一些錯別字,但這無疑幫助我獲得了透視。謝謝, – 2013-02-23 09:58:11