Cấp bậc tác giả:

DATABASE

Hướng dẫn xây dựng website: Viết store procedure phần 5

Được viết bởi QuangIT ngày 13/08/2012 lúc 07:31 PM
Tiếp theo mình sẽ viết thủ tục tìm kiếm bài viết theo điều kiện Trong thủ tục này mình viết tìm kiếm bài viết đơn giản theo trạng thái (Status), Theo Chuyên mục (CateID) và theo từ khóa (Keyword). Ngoài ra bạn muốn tìm theo các trường khác như Thời gian viết, Thời gian đăng, ... bạn có thể bổ xung vào thủ tục
  • 0
  • 9571

Hướng dẫn xây dựng website: Viết store procedure phần 5

Tiếp theo mình sẽ viết thủ tục tìm kiếm bài viết theo điều kiện
Trong thủ tục này mình viết tìm kiếm bài viết đơn giản theo trạng thái (Status), Theo Chuyên mục (CateID) và theo từ khóa (Keyword). Ngoài ra bạn muốn tìm theo các trường khác như Thời gian viết, Thời gian đăng, ... bạn có thể bổ xung vào thủ tục
+ Trạng Thái
   - Nếu @Status=1 => Các bài đã đăng
   - Nếu @Status=-1 => Các bài chờ đăng
   - Nếu @Status=0 => Không Set
+ Chuyên mục
   - Nếu @CateID>0 => Tìm theo điều kiện CateID
+ Từ khóa
    Ở đây mình tìm kiếm theo điều kiện LIKE ở trường Title và trường Description (Nếu bạn cần tìm theo các trường khác thì bạn có thể thay đồi)

Thủ tục tìm kiếm minh họa như sau

-- =============================================
-- Author:        webmaster@hmweb.com.vn
-- Description:   <Tìm kiếm bài viết theo điều kiện>
-- =============================================
CREATE PROCEDURE spTB_News_Search
@Status int,
@CateID int,
@Keyword nvarchar(255)
AS
BEGIN
      -- Khai báo chuỗi truy vấn
      DECLARE @SQL nvarchar(4000)
      SET @SQL =''
      SET @SQL =@SQL+ N'
            SELECT    
            TB_Category.CateID,
            TB_Category.CateName,
            TB_News.idNews,
            TB_News.UserName,
            TB_News.Title,
            TB_News.Description,
            TB_News.Content,
            TB_News.Author,
            TB_News.Picture,
            CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,
            CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,
            CASE TB_News.Status
                        WHEN 1 THEN N''Đã đăng''
                        WHEN 0 THEN N''Chưa đăng'' END AS Status, 
            TB_News.Numberreads,
            TB_News.Link
            FROM         TB_Category INNER JOIN
            TB_News ON TB_Category.CateID = TB_News.CateID WHERE ''1''=''1'''
           
            --Khai báo điều kiện tìm kiếm
            DECLARE @SQLWhere nvarchar(4000)
            SET @SQLWhere=''
           
            -- Nếu @Status=1 thì tìm điều kiện Status=1 (Đã đăng)
            IF @Status=1
                  SET @SQLWhere=@SQLWhere+ N' AND TB_News.Status =1 '
            -- Nếu @Status=-1 thì tìm điều kiện Status=0 (Chờ đăng)    
            IF @Status=-1
                  SET @SQLWhere =@SQLWhere+ ' AND TB_News.Status =0 '
            -- Tìm kiếm theo chuyên mục nếu @CateID>0
            IF @CateID>0
                  SET @SQLWhere =@SQLWhere+ ' AND TB_News.CateID = '+cast(@CateIDAS char(20)) +''
            -- Tìm kiếm theo từ khóa
            IF @Keyword<>''
                  SET @SQLWhere =@SQLWhere+ '
                  AND ( TB_News.Title LIKE ''%'+@Keyword+ '%''
                  OR TB_News.Description  LIKE ''%'+@Keyword+ '%'')'
           
            -- Khai báo Chuỗi thực thi tìm kiếm
            DECLARE @SQLEXEC nvarchar(4000)
            -- Kết hợp điều kiện tìm kiếm vào chuỗi truy vấn
            SET @SQLEXEC=@SQL+@SQLWhere  
            -- Thực thi điều kiện tìm kiếm và trả về dữ liệu nếu có
            EXEC sp_executesql @SQLEXEC
 --PRINT @SQLEXEC
END

Nguồn bài viết: hmweb

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML