2011-04-04 92 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") 
...