2014-01-07 78 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]