2014-01-07 77 views
0

我正在修改别人的代码,并且遇到了一个我似乎无法解决的问题。在数据库中,我们有商店位置和五种类型的产品。如果某个地点销售产品,则数据库值为“X”。如果不是,则数据库值为空。我正在修改的应用程序有一个搜索框,一个城市,zip和五个产品的复选框(这是刚刚添加的部分)。理想情况下,您只能输入一个参数,它会根据你输入/检查了什么,或者你可以输入/检查多个参数。城市/邮编位工作正常,但结果只显示销售全部5种产品的地点 - 它不识别空值。这是我的提交功能的搜索形式:多个复选框值

<script type="text/javascript"> 
    $(function() { 
     $(".form #searchBtn").click(function() { 
      var searchParameters = ""; 
      if ($(".form #city").val() != "") { 
       if (searchParameters != "") { 
        searchParameters += "&"; 
       } 
       searchParameters += "city=" + $(".form #city").val(); 
      } 
      if ($(".form #zip").val() != "") { 
       if (searchParameters != "") { 
        searchParameters += "&"; 
       } 
       searchParameters += "zip=" + $(".form #zip").val(); 
      } 

      if ($(".form #product1").is(':checked')) { 
         if (searchParameters != "") { 
          searchParameters += "&"; 
         } 
         searchParameters += "product1=" + "X"; 
      } 
      if ($(".form #product2").is(':checked')) { 
         if (searchParameters != "") { 
          searchParameters += "&"; 
         } 
         searchParameters += "product2=" + "X"; 
      } 
      if ($(".form #product3").is(':checked')) { 
           if (searchParameters != "") { 
            searchParameters += "&"; 
           } 
           searchParameters += "product3=" + "X"; 
      } 
      if ($(".form #product4").is(':checked')) { 
           if (searchParameters != "") { 
            searchParameters += "&"; 
           } 
           searchParameters += "product4=" + "X"; 
      } 
      if ($(".form #product5").is(':checked')) { 
           if (searchParameters != "") { 
            searchParameters += "&"; 
           } 
           searchParameters += "product5=" + "X"; 
      } 
    searchParameters = searchParameters.replace(" ","%20"); 
      $.fn.colorbox({ href: 'locations.aspx?' + searchParameters }); 
     }); 
    }); 
</script> 

此代码生成一个URL与搜索参数,locations.aspx城市=胡说& otherParamsHere?任何想法将不胜感激。

编辑

要回答你的问题,代码全都在前端。以下是查询生成结果的locations.aspx的查询内容。

<asp:SqlDataSource ID="locations" runat="server" 

     SelectCommand="SELECT * FROM [locations] WHERE (([city] LIKE '%' + @city + '%') AND ([zip] LIKE '%' + @zip + '%') AND ([product1] LIKE '%' + @product1 + '%') AND ([product2] LIKE '%' + @product2 + '%') AND ([product3] LIKE '%' + @product3 + '%') AND ([product4] LIKE '%' + @product4 + '%') AND ([product5] LIKE '%' + @product5 + '%')) ORDER BY [retailer_name]"> 
     <SelectParameters> 
      <asp:QueryStringParameter DefaultValue="%" Name="city" 
       QueryStringField="city" Type="String" /> 
      <asp:QueryStringParameter DefaultValue="%" Name="zip" 
       QueryStringField="zip" Type="String" /> 
      <asp:QueryStringParameter DefaultValue="%" Name="product1" 
       QueryStringField="product1" Type="String" /> 
      <asp:QueryStringParameter DefaultValue="%" Name="product2" 
       QueryStringField="product2" Type="String" /> 
      <asp:QueryStringParameter DefaultValue="%" Name="product3" 
       QueryStringField="product3" Type="String" /> 
      <asp:QueryStringParameter DefaultValue="%" Name="product4" 
       QueryStringField="product4" Type="String" /> 
      <asp:QueryStringParameter DefaultValue="%" Name="product5" 
       QueryStringField="product5" Type="String" />  
     </SelectParameters> 
    </asp:SqlDataSource> 

编辑

再次修订包括形式。

   <input type="text" id="city" size="20" /> 
       <input type="text" id="zip" maxlength="5" size="5" /> 
       <input type="checkbox" id="product1" value="" /> 
     <input type="checkbox" id="product2" value="" /> 
       <input type="checkbox" id="product3" value="" /> 
       <input type="checkbox" id="product4" value="" /> 
       <input type="checkbox" id="product5" value="" /> 
       <input type="button" value="Search" id="searchBtn"/> 
+0

可能是您的后端代码位于locations.aspx.cs中。你可以追加一些包含搜索方法的代码吗? –

+0

见上面...让我知道如果有什么我可以告诉你。 – user2697262

+0

请参阅我的建议以获取下面的新Sql语句。 –

回答

0

您应该在您的产品之间使用OR或select语句where子句,我认为您可以跳过一些括号。你只需要围绕你的OR:s括起来,而不是围绕AND:s试试这个

SELECT * FROM [locations] 
WHERE [city] LIKE '%' + @city + '%' AND 
     [zip] LIKE '%' + @zip + '%' AND 
     ([product1] LIKE '%' + @product1 + '%' OR 
     [product2] LIKE '%' + @product2 + '%' OR 
     [product3] LIKE '%' + @product3 + '%' OR 
     [product4] LIKE '%' + @product4 + '%' OR 
     [product5] LIKE '%' + @product5 + '%' 
    ) 
ORDER BY [retailer_name] 
+0

它更好,但仍然无法正常工作。现在正在做的是尊重你输入的任何城市或邮编,并返回任何与之相匹配的内容,但不尊重产品框是否已被检查。如果您选中一个,并且不输入城市或邮政编码,它将返回整个数据库。 – user2697262

+0

你必须使用LIKE比较吗?尝试改为=(等于比较)。 –

+0

并且为了澄清,如果您输入邮政编码并检查产品,它将返回该邮编内的所有位置,而不管该产品是否已售出。这就像它完全忽略了产品。 – user2697262

0

我会给出同样的对比试试吧。试试这个:

SELECT * FROM [locations] 
WHERE ([city] = @city OR @city = '%') AND 
     ([zip] = @zip OR @zip = '%') AND 
     ( 
      [product1] = @product1 OR @product1 = '%' OR 
      [product2] = @product2 OR @product2 = '%' OR 
      [product3] = @product3 OR @product3 = '%' OR 
      [product4] = @product4 OR @product4 = '%' OR 
      [product5] = @product5 OR @product5 = '%' 
    ) 
ORDER BY [retailer_name] 
0

你超级近!因为你,我能够捅到它,直到我知道它是正确的。以下是我最后的SQL语句最终成为的内容,并按照我的意图执行:

SELECT * FROM [locations] 
     WHERE ([city] = @city OR @city = '%') 
     AND ([zip] = @zip OR @zip = '%') 
     AND 
     (
     ([product1] = @product1 OR @product1 = '%') 
     AND ([product2] = @product2 OR @product2 = '%') 
     AND ([product3] = @product3 OR @product3 = '%') 
     AND ([product4] = @product4 OR @product4 = '%') 
     AND ([product5] = @product5 OR @product5 = '%' 
     )) 
     ORDER BY [retailer_name]