2011-06-14 77 views
0

我不擅長SQL,我有一個簡單的郵政編碼查找器,我爲我的網站創建。在SQL如下:SQL搜索配置

$query = "select * from zipcodes2 where ZipCode like \"%$trimmed%\" 

* \「%$修剪當然%*是實際的郵政編碼的用戶在進入它的偉大工程,但現在我想通過讓用戶搜索,使之更加提前。城市或州,而不僅僅是郵政編碼,我已經創建了這些列,它們被命名爲「城市」和「州」,究竟應該把什麼東西放進SQL行呢?我需要更改代碼的其他部分,特別是\「%$ trimmed%\零件?

+0

如果你沒有讓用戶搜索部分郵政編碼,即你需要5個字符的輸入,你可以使用等號(=)不「喜歡」。如果您在搜索項的兩側使用%通配符%,則必須掃描整個表格。 – Tim 2011-06-14 18:52:06

+0

謝謝。我嘗試過,它的工作原理。 – zach 2011-06-14 19:55:03

回答

1

這是不是一個偉大的做法,但你想有什麼用,你可以得到接近:

$query = "select * from zipcodes2 where ZipCode like '%$trimmed%' or (CONCAT(City, ',', State) = '$trimmed')" 

但你必須確保用戶的響應沒有白色的空間,所以它出來爲Chicago,IL,而不是類似於Chicago, ILChicago , IL

你可以把這個查詢之前:

$trimmed = preg_replace('/\s+/', ' ', $trimmed); 
+0

這沒有奏效。當我嘗試它時,無論查詢是什麼,它都會顯示錶中的第一行。 – zach 2011-06-14 19:48:31

+0

@zach我的壞... MySQL的錯誤SQL。給那個旋轉。 – NullRef 2011-06-14 20:28:18

+0

這有效,但用戶輸入後如何擺脫空白空間?我不想強迫用戶永遠不要放置空白區域。這是不可靠的。 – zach 2011-06-14 20:48:09

1

你可以嘗試這樣的事:

select * 
    from zipcodes2 
    where 
    (
     ZipCode like '%$trimmed%' 
     OR City like '%City%' 
     OR State like '%State%' 
    ) 
0

您應該能夠通過修改SQL查詢類似做到:

SELECT * FROM zipcodes2 WHERE郵編LIKE \「%$修剪% \「OR(State = \」$ state_vairable \「AND City = \」$ city_variable \「)

這當然取決於您的最終目標。如果您嘗試匹配明確的城市/州組合,上述工作。

如果您希望人們能夠在美國找到所有名爲「townsville」的地方的郵編,請刪除括號並將AND更改爲OR。

+0

我的最終目標是讓用戶通過郵政編碼或城市/州組合來搜索列表。他們將不得不進入城市,像這樣:芝加哥,IL。我怎麼做? – zach 2011-06-14 16:58:28

+0

在這種情況下,上面的SELECT語句應該這樣做: – 2011-06-14 17:12:21

+0

爲什麼你有\「$ state_vairable \」和\「$ city_variable \」?我只有一條輸入行供用戶輸入信息。它似乎沒有工作。我已經在所有三個地方用相同的美元進行了嘗試。 – zach 2011-06-14 17:15:21