晚上所有。mysql郵編搜索
我有一個屬性網站的MySQL數據庫。有一個搜索表單,人們可以在同一個字段中輸入地點或郵編。在SQL的
部分是
PostCode LIKE '$Loc%
把我的問題是,有些人進入一個帖子這樣的代碼:「l236yt」,有的像這樣「L23 6YT」的空間。
該數據庫包含郵政編碼與他們的空間,所以如何使它可以使用或不使用空間?
任何幫助,將不勝感激
感謝巴茲
晚上所有。mysql郵編搜索
我有一個屬性網站的MySQL數據庫。有一個搜索表單,人們可以在同一個字段中輸入地點或郵編。在SQL的
部分是
PostCode LIKE '$Loc%
把我的問題是,有些人進入一個帖子這樣的代碼:「l236yt」,有的像這樣「L23 6YT」的空間。
該數據庫包含郵政編碼與他們的空間,所以如何使它可以使用或不使用空間?
任何幫助,將不勝感激
感謝巴茲
假設在你的數據庫中的值是沒有空間的,只是清理用戶價值的價值沒有空間:
$val = str_replace(' ', '', $val);
你可以將字符串轉換爲字符數組,然後搜索空格,如果找不到任何空格,則可以繼續插入空格(空格將始終在6個字符的郵政編碼中的第三個字符之後,並且在第四個在7茶字符所以你可以使用正則表達式很簡單地做到這一點。我相信也有5個字符長的郵政編碼,這些郵政編碼就像A1 1AA一樣,所以在第二個字符後面你會找到空格。
由於缺乏語言知識,我無法提供精確的代碼,但祝您好運!
對於其他海報,請注意他說postcodes是與空間一起收集的! – XtrmJosh 2013-02-15 21:47:57
需要一個有效的郵政編碼爲輸入(帶或不帶空格),將其分解成組成部分以及返回它整齊地格式化在適當的地方
function parsePostcode($postcode) {
$postcode = preg_replace('/\s*/','',strtoupper($postcode));
$sector = substr($postcode,0,-2);
$outcode = $district = substr($sector,0,-1);
list($area) = sscanf($district,'%[A-Z]');
$incode = substr($postcode,-3);
return array(
'postcode' => $postcode,
'formatted' => $outcode.' '.$incode,
'area' => $area,
'district' => $district,
'sector' => $sector,
'outcode' => $outcode,
'incode' => $incode,
);
}
你的首要任務是將空間從查詢中刪除LIKE條件。使用LIKE條件迫使MySQL評估表中的每一行,效率非常低。除非絕對必要,儘量避免使用LIKE。爲了改變您的查詢的這個部分,你將需要替換它:
PostCode = "$Loc"
此向您提供兩種選擇:
1)淨化你的輸入。 Postcode遵循一個衆所周知的格式,因此可以將某人輸入的值轉換爲您期望的值。然後您可以搜索。由於$ Loc與您在數據庫中的內容完全匹配,因此在數據庫中查找時會非常快(只要您已將索引編入了該領域!)。
2)用多個值重載數據庫以表示相同的郵政編碼。這意味着你會將「l236yt」和「l23 6yt」放在數據庫中,並將它們處理爲不同的值。這也有助於您僅在郵政編碼的第一部分(如「l23」)上進行搜索,但只有在郵政編碼和位置之間具有一對多關係時纔有用。
您可以使用PHP – 2013-02-15 21:45:45
@Pekka웃或使用MySQL從輸入值中刪除空格。 – Kermit 2013-02-15 21:48:10
@njk我會在應用程序級別執行此操作,以防出現需要過濾的其他字符。在mySQL中,這會很快看起來很尷尬 – 2013-02-15 21:50:31