2008-11-06 33 views
1

開發一個網站,只是想回到今晚(聰明)的SQL查詢等,我的心已經完全消失的擺動一個文本框查詢!SQL - 通過這可能需要不同的值

有一個網站http://www.ufindus.com/其中有一個文本框讓你輸入一個地名或郵編/郵編。我試圖做similiar但我在SQL垃圾的東西 - 你怎麼這麼構造的SQL語句可能看到2列(即地方和郵編),因爲你不能查詢這兩個字段相同的值,例如

place = 'YORK' AND postcode = 'YORK' 

place = 'YO21 5EA' AND postcode = 'YO21 5EA' 

所以你必須在把一些邏輯足夠智能檢測是否它看起來像一個地名或郵編 - 只是似乎過於複雜,我!任何幫助將非常感激。

回答

7

您可以使用「或」來完成工作。例如,

地方= '紐約' 或郵編= '紐約'

您也可能會做更好的使用LIKE語句,如

放在哪裏LIKE 'YORK%' 或郵編LIKE「YORK %」

(假設兩個地方,郵政編碼是基於字符的列)

3

爲什麼不使用或代替AND?

place = @textboxvalue OR post = @textboxvalue 
0

試圖在地點和郵政編碼上匹配有什麼問題?如果我把'約克'和(某處)恰好是一個有效的郵政編碼,我應該得到這個結果。至於防止同樣的事情輸入兩次,那麼你可以在進行數據庫調用之前處理驗證。

啊。猜測我的速度有點慢。是的......其他人建議的是正確的,'或'就是你要找的東西。我被曲解了。

0

好吧,首先,我假設你有一個表,郵政編碼,以地名的映射。

讓我們把這種表 '郵編' 與列 '郵編' 和 'postplace'。這兩個都是char類型的。

然後..不管你做什麼,要確保從用戶輸入不是動態SQL的一部分。確保它是參數。否則,你正在邀請SQL注入攻擊,這可能會毀了你的一天。這是重要

我們的用戶輸入是@textboxstring

鑑於此,你可以得到的郵政編碼和postplace這樣的:

select @textboxstring = RTRIM(@textboxstring) + '%'; select postcode, postplace from postcode where postcode like @textboxstring or postplace like @textboxstring;

請注意,我修改@textboxstring得到通配符匹配like而無需使用動態SQL。

如果郵編是整數,那麼在執行sql之前,您需要將輸入轉換爲int。所以用@textboxint爲好,你可以這樣做:

select @textboxstring = RTRIM(@textboxstring) + '%'; select postcode, postplace from postcode where postcode = @textboxint or postplace like @textboxstring;

哦,你需要處理,你的搜索可以有多個結果。你可能只想要第一行。