2011-09-17 120 views
-1

我試圖在一個文本字段中搜索城市,州和郵編。在一個文本字段中搜索城市,州和郵編

<form action="" method="post"> 
    <input type="text" name="search_loc" /> 
    <input type="text" name="search_sty" /> 
    <input type="submit" value="search" /> 
</form> 

$query = "SELECT 
     name, street, city, state, zip_code, phone_number, style, description, time 
     FROM sesh 
     WHERE city 
     LIKE '%$search_loc%' 
     OR state 
     LIKE '%$search_loc%' 
     OR zip_code 
     LIKE '%$search_loc%' 
     AND style LIKE '%$search_sty%' 
     "; 

這適用於一次一種類型。所以,我可以通過自己來尋找狀態。我想能夠鍵入:「芝加哥,伊利諾伊州60493」或什麼,並讓它拉動結果。關於如何做到這一點的任何想法?謝謝。

+0

與「關閉」票是什麼。這是一個完全合理的MySQL問題。 –

回答

0

你可以連接你對搜索到的列在結果集的「虛擬」欄,然後比較針對串聯這樣的搜索詞:

SELECT * FROM sesh WHERE CONCAT(city, ', ', state, ' ', zip_code) = ? 

假設匹配必須是精確的。如果人們可以輸入,比如「芝加哥,IL」或「IL 60493」,那麼你可以恢復,如:

SELECT * FROM sesh WHERE CONCAT(city, ', ', state, ' ', zip_code) LIKE %?% 

(?那裏矗立在參數查詢)。

在這些示例中,用戶的標點符號必須與您的城市完​​全匹配(城市後跟命令和空格,狀態後跟空格)。但是,如果你想要把它遠一點,剝離出由用戶輸入的項目的所有空格和標點符號做:

SELECT * FROM sesh WHERE CONCAT(city, state, zip_code) LIKE %?% 
0

選項1將在空間(「芝加哥」,「IL」,「60493」)上分隔輸入的搜索詞(「Chicago,IL 60493」),然後執行您已製作的相同搜索操作對於每個細分市場(可能在剝離標點之後)。

另外,也許更有效的是,你可以看看使用MySQL的全文搜索。查看本教程​​瞭解如何使用它的一些指示。

+0

謝謝,我會去看看那篇文章。選擇。 1我不完全遵循。我可以爲punc做str_replace。和空間。但是,我的城市,州和郵編分列。所以我只能在我的查詢中一次匹配一列。我如何在一個LIKE實例中使用所有三個?我可以看到,如果我有一個城市狀態和一列沒有逗號的zip文件,這將是可能的。在搜索中剝奪了所有準備。對不起,我在這個問題上跳過了很多。但是,我試圖瞭解我該如何做到這一點。 – Graham

0

這應該工作:

$query = "SELECT name, street, city, state, zip_code, phone_number, style, description, time 
      FROM sesh 
      WHERE '$search_loc' like concat('%', city, '%', state, '%', zip_code, '%') 
      AND style LIKE '%$search_sty%'"; 

只要確保逃生$ search_loc和$ search_sty以避免潛在的SQLI攻擊。

相關問題