2013-02-15 32 views
1

晚上所有。mysql郵編搜索

我有一個屬性網站的MySQL數據庫。有一個搜索表單,人們可以在同一個字段中輸入地點或郵編。在SQL的

部分是

PostCode LIKE '$Loc% 

把我的問題是,有些人進入一個帖子這樣的代碼:「l236yt」,有的像這樣「L23 6YT」的空間。

該數據庫包含郵政編碼與他們的空間,所以如何使它可以使用或不使用空間?

任何幫助,將不勝感激

感謝巴茲

+0

您可以使用PHP – 2013-02-15 21:45:45

+0

@Pekka웃或使用MySQL從輸入值中刪除空格。 – Kermit 2013-02-15 21:48:10

+0

@njk我會在應用程序級別執行此操作,以防出現需要過濾的其他字符。在mySQL中,這會很快看起來很尷尬 – 2013-02-15 21:50:31

回答

0

假設在你的數據庫中的值是沒有空間的,只是清理用戶價值的價值沒有空間:

$val = str_replace(' ', '', $val); 
0

你可以將字符串轉換爲字符數組,然後搜索空格,如果找不到任何空格,則可以繼續插入空格(空格將始終在6個字符的郵政編碼中的第三個字符之後,並且在第四個在7茶字符所以你可以使用正則表達式很簡單地做到這一點。我相信也有5個字符長的郵政編碼,這些郵政編碼就像A1 1AA一樣,所以在第二個字符後面你會找到空格。

由於缺乏語言知識,我無法提供精確的代碼,但祝您好運!

+0

對於其他海報,請注意他說postcodes是與空間一起收集的! – XtrmJosh 2013-02-15 21:47:57

0

需要一個有效的郵政編碼爲輸入(帶或不帶空格),將其分解成組成部分以及返回它整齊地格式化在適當的地方

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, 
    ); 
} 
0

你的首要任務是將空間從查詢中刪除LIKE條件。使用LIKE條件迫使MySQL評估表中的每一行,效率非常低。除非絕對必要,儘量避免使用LIKE。爲了改變您的查詢的這個部分,你將需要替換它:

PostCode = "$Loc" 

此向您提供兩種選擇:

1)淨化你的輸入。 Postcode遵循一個衆所周知的格式,因此可以將某人輸入的值轉換爲您期望的值。然後您可以搜索。由於$ Loc與您在數據庫中的內容完全匹配,因此在數據庫中查找時會非常快(只要您已將索引編入了該領域!)。

2)用多個值重載數據庫以表示相同的郵政編碼。這意味着你會將「l236yt」和「l23 6yt」放在數據庫中,並將它們處理爲不同的值。這也有助於您僅在郵政編碼的第一部分(如「l23」)上進行搜索,但只有在郵政編碼和位置之間具有一對多關係時纔有用。