2014-02-28 19 views
0

我想通過名稱,價格或賣家的用戶名搜索產品,如果其中一個未被選擇,例如如果只插入名稱,則查找所有項目其中有這個名字,如果我精簡更多的信息,如價格,物品之間的名稱已插入項目,並尋找與當前價格的項目使用sql語句使用或搜索或

我已經到達這一點,但我仍然無法做到更可以爲您的幫助,請

Declare @endate datetime , 
     @name varchar(50), 
     @cat varchar(50), 
     @to varchar (50), 
     @from varchar(50), 
     @user varchar(100), 
     @con varchar(100) 

     AS 
SELECT * 
FROM 
(
    SELECT Top(6) 
      Item.ItemID, 
      Auction.AuctionID, 
      Item.Name, 
      Item.Description, 
      Item.Quantity, 
      Item.Condition, 
      Category.CategoryName AS Expr1, 
      Auction.EndDate, 
      Auction.CurrencyValuePost, 
      Image.Image, 
      ROW_NUMBER() OVER (PARTITION BY Item.ItemID ORDER BY Item.ItemID ASC) AS RN 
    FROM Item 
    INNER JOIN Category ON Item.CategoryID = Category.CategoryID 
    INNER JOIN Auction ON Item.ItemID = Auction.ItemID 
    INNER JOIN Seller ON Item.SellerID = Seller.SellerID 
    INNER JOIN Member ON Seller.MemberID = Member.MemberID 
    LEFT OUTER JOIN Image ON Item.ItemID = Image.ItemID 
    WHERE Auction.Status = 'BID' 
    And Auction.EndDate > @endate 
    And Category.CategoryName = @cat 
    And Item.Name = @name 
    And CurrencyValuePost BETWEEN @from and @to 
    And Item.Condition = @con 
    And Member.Username = @user 
) AS T 
WHERE RN = 1 

回答

3

在您的WHERE子句,你可以這樣做:

WHERE 
    (@name IS NULL OR Item.Name = @name) 
AND 
    (@cat IS NULL OR Category.CategoryName = @cat) 
AND 
    (@user IS NULL OR Member.Username = @user) 
AND 
    (...any additional clauses)  
+1

謹防索引將不會被用於任何參與這些OR子句中的列。 –

0

這是您的查詢應該如何看起來像:

Declare @endate datetime , 
     @name varchar(50), 
     @cat varchar(50), 
     @to varchar (50), 
     @from varchar(50), 
     @user varchar(100), 
     @con varchar(100); 


SELECT * 
FROM 
(
    SELECT Top(6) 
      Item.ItemID, 
      Auction.AuctionID, 
      Item.Name, 
      Item.Description, 
      Item.Quantity, 
      Item.Condition, 
      Category.CategoryName AS Expr1, 
      Auction.EndDate, 
      Auction.CurrencyValuePost, 
      Image.Image, 
      ROW_NUMBER() OVER (PARTITION BY Item.ItemID ORDER BY Item.ItemID ASC) AS RN 
    FROM Item 
    INNER JOIN Category ON Item.CategoryID = Category.CategoryID 
    INNER JOIN Auction ON Item.ItemID = Auction.ItemID 
    INNER JOIN Seller ON Item.SellerID = Seller.SellerID 
    INNER JOIN Member ON Seller.MemberID = Member.MemberID 
    LEFT OUTER JOIN Image ON Item.ItemID = Image.ItemID 
    WHERE Auction.Status = 'BID' 
    And Auction.EndDate > @endate 
    And (@cat = '' or Category.CategoryName = @cat) 
    And (@name = '' or Item.Name = @name) 
    And (@con = '' or Item.Condition = @con) 
    And CurrencyValuePost BETWEEN @from and @to 
    And Member.Username = @user 

) AS T 
WHERE RN = 1; 
+0

它是說SAYING SYNTAX錯誤')' – user3287068

+0

仍然不工作,如果要求其他參數 – user3287068