2012-07-06 67 views
0

我們正在開發一個使用ASP.NET和sql server的網站。我們希望提供精煉搜索,基本上針對一個或多個特定條件過濾我們的搜索結果。我們要展示的所有細化搜索字段和計數(類似於亞馬遜的網站,幾個字段顯示與計數的搜索結果的左側)如何使用SQL Server爲我的ASP.NET網站提供精確搜索


按價格
50到100(10)
100至500(50)...

通過發送時間
7天內(40)
在15天內(90)
在30天內(150)

依此類推...

我們的正常搜索使用多個搜索條件進行。我們使用SQL Server,存儲過程使用分頁技術和每頁結果數。

所以,當你回答時,請考慮這些信息,並提供一個工作示例鏈接,如果可以的話。

非常感謝。

+0

您沒有提供足夠的信息來真正提供「工作示例」。你已經嘗試了什麼? – 2012-07-06 08:18:22

+0

,因爲我沒有爲我的問題得到確切的解決方案,而且我放棄投票選出我認爲有幫助的答案 – 2012-07-07 07:42:23

+0

致Andrew Barber, – 2012-07-07 07:42:45

回答

1

這隻能通過對sql server過程和代碼進行小的修改來完成。

保留所有精化元素作爲存儲過程的變量。 如果price是精煉屬性,則將精製參數的值傳遞給sql服務器,例如: 然後創建2個變量@min_price和@max_price,這些變量將傳遞給存儲過程幷包含在分頁前語句的哪個位置並進行分類。
編輯:
你的意思是你需要條件參數。 在這種情況下,使用ISNULL() 例如:您希望某個價格範圍內的產品和某個類別的產品名稱,即手機,電子產品。現在如果這個Category參數爲null,那麼我們需要避免比較。在這種情況下:

SELECT * 
FROM Products p 
WHERE 
p.Price BETWEEN @min_price AND @max_price 
AND 
p.Category = ISNULL(@category, p.Category) 

現在,在這種情況下發生的事情是,如果@Category參數爲null,則它取代範疇本身即移動=移動將返回true的比較。

而且,如果查詢要形成太複雜,那麼動態sql查詢是唯一的出路。但是儘量避免這些因素,這些執行計劃不會被保存下來,因此性能會受到影響。

+0

這很有幫助,但我的許多精煉字段都存儲爲查找表(字符串),所以它不僅僅是一些int值,我們可以使用最小或最大範圍 – 2012-07-07 07:38:54

+0

@vs - Brother編輯了我的答案。檢查它是否有幫助。 – bhuvin 2012-07-09 06:35:10