- Hàm trả về 10 bài viết mới hơn cùng chuyên mục, gần nhất với bài viết được chọn
-- =============================================
-- Author: [You must be registered and logged in to see this link.]
-- Description: <Hàm trà về 10 bài viết mới hơn, cùng chuyên mục, gần nhất với bài viết được chọn>
-- =============================================
CREATE FUNCTION [dbo].[fuNewOfNews]
(
@idNews int,
@CateID int
)RETURNS @TB_News_New TABLE
(
idNews int,
Title nvarchar(2000)
)
AS
BEGIN
INSERT INTO @TB_News_New
SELECT TOP 10 TB_News.idNews,
'<A href='+ dbo.ufDomainName()+TB_News.Link +' >'+TB_News.Title+'</a>' as Title
FROM TB_News INNER JOIN
TB_Category ON TB_News.CateID = TB_Category.CateID
WHERE TB_News.idNews>@idNews AND TB_News.CateID=@CateID AND TB_News.Status=1
ORDER BY TB_News.idNews DESC
RETURN
END
- Hàm trả về 10 bài viết cũ hơn cùng chuyên mục, gần nhất với bài viết được chọn
-- =============================================
-- Author: [You must be registered and logged in to see this link.]
-- Description: <Hàm trà về 10 bài viết cũ hơn, cùng chuyên mục, gần nhất với bài viết được chọn>
-- =============================================
CREATE FUNCTION [dbo].[fuOldOfNews]
(
@idNews int,
@CateID int
)
RETURNS @News_Old TABLE
(
idNews int,
Title nvarchar(2000)
)
AS
BEGIN
INSERT INTO @News_Old
SELECT TOP 10 TB_News.idNews,
'<A href='+ dbo.ufDomainName()+TB_News.Link +' >'+TB_News.Title+'</a>' as Title
FROM TB_News INNER JOIN
TB_Category ON TB_News.CateID = TB_Category.CateID
WHERE TB_News.idNews<@idNews
AND TB_News.CateID=@CateID AND TB_News.Status=1
ORDER BY TB_News.idNews DESC
RETURN
END
Tiếp theo mình sẽ viết Store procedure đề lấy danh sách 10 bài viết mới hơn và 10 bài viết cũ hơn gần nhất (Nếu có)
-- =============================================
-- Author: [You must be registered and logged in to see this link.]
-- Description: <truy vấn danh sách các bài viết khác cùng chuyên mục>
-- =============================================
CREATE PROCEDURE [dbo].[spTB_News_SelectCacBaiVietKhac]
@idNews int,
@CateID int
AS
BEGIN
DECLARE @SQL nvarchar(4000)
SET @SQL=''
-- Kiểm tra có bài viết mới hơn không
DECLARE @countNew int
SELECT @countNew = count(idNews) FROM TB_News
WHERE TB_News.idNews>@idNews AND CateID=@CateID AND Status=1
IF @countNew IS NULL SET @countNew=0
-- Kiểm tra có bài viết cũ hơn không
DECLARE @countOld int
SELECT @countOld = COUNT(idNews) FROM TB_News
WHERE idNews<@idNews AND CateID=@CateID AND Status=1
IF @countOld IS NULL SET @countOld=0
--Nếu có bài viết mới hơn
IF @countNew>0
BEGIN
-- Nếu có bài viết cũ hơn thì truy vấn 10 bài mới và 10 bài viết gần nhất
IF @countOld >0
BEGIN
SET @SQL=@SQL+ N'SELECT 999999999999 AS idNews,
N''<b>[Các bài viết mới hơn]</b>'' AS Title
Union
SELECT TOP 10 TB_News.idNews,
''<A href=''+ dbo.ufDomainName()+TB_News.Link +''>''+TB_News.Title+''</a>'' as Title FROM TB_News
INNER JOIN TB_Category ON TB_News.CateID = TB_Category.CateID
WHERE TB_News.Status=1 AND TB_News.idNews>'+cast(@idNews AS nvarchar(20))+' AND
TB_News.CateID='+cast(@CateID AS nvarchar(20))+'
'
SET @SQL =@SQL+'
Union SELECT '+cast(@idNews AS nvarchar(20))+' AS idNews,
N''<b>[Các bài đã đăng]</b>'' AS Title
Union
Select idNews, Title from [dbo].[fuOldOfNews]('+Cast(@idNews AS nvarchar(20))+','+Cast(@CateID AS nvarchar(20))+')
ORDER BY TB_News.idNews DESC'
END
-- Ngược lại chỉ truy vấn 10 bài viết mới hơn gần nhất
ELSE
BEGIN
SET @SQL =@SQL+N'SELECT 999999999999 AS idNews, N''<b>[Các bài mới hơn]</b>'' AS Title
UNION
Select idNews, Title from [dbo].[fuNewOfNews]('+Cast(@idNews AS nvarchar(20))+','+Cast(@CateID AS nvarchar(20))+')
ORDER BY idNews DESC'
END
END
-- Nếu không có bài viết mới hơn => truy vấn 10 bài viết cũ hơn gần nhất
ELSE
BEGIN
SET @SQL =@SQL+N'SELECT 999999999999 AS idNews, N''<b>[Các bài đã đăng]</b>'' AS Title
UNION
Select idNews, Title from [dbo].[fuOldOfNews]('+Cast(@idNews AS nvarchar(20))+','+Cast(@CateID AS nvarchar(20))+')
ORDER BY idNews DESC'
END
--PRINT @SQL
-- Thực thi trà về danh sách bài viết
EXEC (@SQL)
END
Ví dụ khi bạn đọc bài viết thứ 13 có id=17 và CateID=5 EXEC [spTB_News_SelectCacBaiVietKhac] 17,5
Kết quả hiển thị như minh họa sau
Chúc bạn thành công
-- =============================================
-- Author: [You must be registered and logged in to see this link.]
-- Description: <Hàm trà về 10 bài viết mới hơn, cùng chuyên mục, gần nhất với bài viết được chọn>
-- =============================================
CREATE FUNCTION [dbo].[fuNewOfNews]
(
@idNews int,
@CateID int
)RETURNS @TB_News_New TABLE
(
idNews int,
Title nvarchar(2000)
)
AS
BEGIN
INSERT INTO @TB_News_New
SELECT TOP 10 TB_News.idNews,
'<A href='+ dbo.ufDomainName()+TB_News.Link +' >'+TB_News.Title+'</a>' as Title
FROM TB_News INNER JOIN
TB_Category ON TB_News.CateID = TB_Category.CateID
WHERE TB_News.idNews>@idNews AND TB_News.CateID=@CateID AND TB_News.Status=1
ORDER BY TB_News.idNews DESC
RETURN
END
- Hàm trả về 10 bài viết cũ hơn cùng chuyên mục, gần nhất với bài viết được chọn
-- =============================================
-- Author: [You must be registered and logged in to see this link.]
-- Description: <Hàm trà về 10 bài viết cũ hơn, cùng chuyên mục, gần nhất với bài viết được chọn>
-- =============================================
CREATE FUNCTION [dbo].[fuOldOfNews]
(
@idNews int,
@CateID int
)
RETURNS @News_Old TABLE
(
idNews int,
Title nvarchar(2000)
)
AS
BEGIN
INSERT INTO @News_Old
SELECT TOP 10 TB_News.idNews,
'<A href='+ dbo.ufDomainName()+TB_News.Link +' >'+TB_News.Title+'</a>' as Title
FROM TB_News INNER JOIN
TB_Category ON TB_News.CateID = TB_Category.CateID
WHERE TB_News.idNews<@idNews
AND TB_News.CateID=@CateID AND TB_News.Status=1
ORDER BY TB_News.idNews DESC
RETURN
END
Tiếp theo mình sẽ viết Store procedure đề lấy danh sách 10 bài viết mới hơn và 10 bài viết cũ hơn gần nhất (Nếu có)
-- =============================================
-- Author: [You must be registered and logged in to see this link.]
-- Description: <truy vấn danh sách các bài viết khác cùng chuyên mục>
-- =============================================
CREATE PROCEDURE [dbo].[spTB_News_SelectCacBaiVietKhac]
@idNews int,
@CateID int
AS
BEGIN
DECLARE @SQL nvarchar(4000)
SET @SQL=''
-- Kiểm tra có bài viết mới hơn không
DECLARE @countNew int
SELECT @countNew = count(idNews) FROM TB_News
WHERE TB_News.idNews>@idNews AND CateID=@CateID AND Status=1
IF @countNew IS NULL SET @countNew=0
-- Kiểm tra có bài viết cũ hơn không
DECLARE @countOld int
SELECT @countOld = COUNT(idNews) FROM TB_News
WHERE idNews<@idNews AND CateID=@CateID AND Status=1
IF @countOld IS NULL SET @countOld=0
--Nếu có bài viết mới hơn
IF @countNew>0
BEGIN
-- Nếu có bài viết cũ hơn thì truy vấn 10 bài mới và 10 bài viết gần nhất
IF @countOld >0
BEGIN
SET @SQL=@SQL+ N'SELECT 999999999999 AS idNews,
N''<b>[Các bài viết mới hơn]</b>'' AS Title
Union
SELECT TOP 10 TB_News.idNews,
''<A href=''+ dbo.ufDomainName()+TB_News.Link +''>''+TB_News.Title+''</a>'' as Title FROM TB_News
INNER JOIN TB_Category ON TB_News.CateID = TB_Category.CateID
WHERE TB_News.Status=1 AND TB_News.idNews>'+cast(@idNews AS nvarchar(20))+' AND
TB_News.CateID='+cast(@CateID AS nvarchar(20))+'
'
SET @SQL =@SQL+'
Union SELECT '+cast(@idNews AS nvarchar(20))+' AS idNews,
N''<b>[Các bài đã đăng]</b>'' AS Title
Union
Select idNews, Title from [dbo].[fuOldOfNews]('+Cast(@idNews AS nvarchar(20))+','+Cast(@CateID AS nvarchar(20))+')
ORDER BY TB_News.idNews DESC'
END
-- Ngược lại chỉ truy vấn 10 bài viết mới hơn gần nhất
ELSE
BEGIN
SET @SQL =@SQL+N'SELECT 999999999999 AS idNews, N''<b>[Các bài mới hơn]</b>'' AS Title
UNION
Select idNews, Title from [dbo].[fuNewOfNews]('+Cast(@idNews AS nvarchar(20))+','+Cast(@CateID AS nvarchar(20))+')
ORDER BY idNews DESC'
END
END
-- Nếu không có bài viết mới hơn => truy vấn 10 bài viết cũ hơn gần nhất
ELSE
BEGIN
SET @SQL =@SQL+N'SELECT 999999999999 AS idNews, N''<b>[Các bài đã đăng]</b>'' AS Title
UNION
Select idNews, Title from [dbo].[fuOldOfNews]('+Cast(@idNews AS nvarchar(20))+','+Cast(@CateID AS nvarchar(20))+')
ORDER BY idNews DESC'
END
--PRINT @SQL
-- Thực thi trà về danh sách bài viết
EXEC (@SQL)
END
Ví dụ khi bạn đọc bài viết thứ 13 có id=17 và CateID=5 EXEC [spTB_News_SelectCacBaiVietKhac] 17,5
Kết quả hiển thị như minh họa sau
Chúc bạn thành công