2011-04-04 109 views
0

我目前正在嘗試通過使用ASP.net和MYSQL創建的網站創建「搜索引擎」,我對這兩者都相當陌生,而且我有這個問題。我已經創建了一個用戶輸入的頁面,以便他們可以通過在一個或所有不同的搜索字段中輸入來進行搜索。 (Make,model,color,..等等)。從用戶那裏得到這些信息,根據輸入的字段創建一個SQL子查詢的最佳方式是什麼。我環顧四周,看到了很多解決方案只寫一個參數爲NULL的UNION調用,但我寧願不要做8! SQL查詢來獲得所有可能性。如果有人有一個建議,將不勝感激。ASP.Net執行SQL(子) - 查詢

回答

1

沒有看到架構,我們不能肯定地說,但我不相信你需要一個子查詢。搜索可以通過強制用戶通過下拉列表選擇製作,模型等工作。在這種情況下,你需要的是一系列與報表基於選擇的標準:

Select ... 
From MyTable 
Where Make = @Make 
    And Model = @Model 
    ... 

你會建立一個基於由未指定用戶排除那些要求參數在C#代碼這個SQL語句。也就是說,如果用戶沒有選擇一個模型,你就不會包含那個And語句。


你的SQL彙編代碼可能看起來像

private function Search(string make, string model, ...) 
{ 
    var sql = new StringBuilder(); 
    sql.AppendLine("Select .... "); 
    sql.AppendLine("From MyTable"); 
    sql.AppendLine("Where 1=1"); //this is just to add the Where keyword 

    var parameters = List<DbParameter>(); 
    if (!string.IsNullOrEmpty(make)) 
    { 
     sql.AppendLine(" And Make = @Make "); 
     parameters.AddWithValue("@Make", make); 
    } 

    if (!string.IsNullOrEmpty(model)) 
    { 
     sql.AppendLine(" And Model = @Model "); 
     parameters.AddWithValue("@Model", model); 
    } 
    ... 
} 

另一個appoach是簡單地構建整個SQL語句檢查空值:

var sql = new StringBuilder(); 
sql.AppendLine("Select .... "); 
sql.AppendLine("From MyTable"); 
sql.AppendLine("Where (@Make Is Null Or Make = @Make") 
sql.AppendLine(" And (@Model Is Null Or Model = @Model") 
...