VinnarenMedlem sedan sep. 2005833 inlägg Hej,
Har förljande:
ALTER PROCEDURE dbo.forum_GetPostsToCategory
(
@CategoryId int,
@PageSize int = 30,
@UserName varchar(256),
@CurrentPage int = 1
)
AS
BEGIN
SELECT p.UserName, p.PostId, p.Header, p.Date, p.Locked, p.Sticky, p.Anonymous, p.Visit
FROM forum_Post AS p
left outer join forum_Post AS op
ON op.ParentPostId = p.PostId
WHERE (p.CategoryId = @CategoryId AND p.ParentPostId = 0) AND p.Deleted = 0
GROUP BY p.PostId, op.Date, p.ParentPostId, p.CategoryId, p.UserId, p.Header, p.Date, p.Message, p.Locked, p.Sticky, p.Deleted, p.Anonymous, p.Visit, p.UserName
ORDER BY p.Sticky DESC, LastPostDate DESC
Nu vill jag räkna ut mha av @CurrentPage samt @PageSize vilka poster som ska hämtas. I MySQL går det ju att anv. LIMIT men hur gör man i MSSQL? Om man tex enbart ska visa posterna 31-60?
Tacksam för all hjälp :stud
Peter SMedlem sedan dec. 20025 483 inlägg ALTER PROCEDURE dbo.forum_GetPostsToCategory
(
@CategoryId int,
@PageSize int = 30,
@UserName varchar(256),
@CurrentPage int = 1
)
AS
BEGIN
WITH forumPosts AS
(
SELECT p.UserName, p.PostId, p.Header, p.Date, p.Locked, p.Sticky, p.Anonymous, p.Visit, p.LastPostDate, ROW_NUMBER() OVER (p.Sticky DESC, LastPostDate DESC) AS RowNumber
FROM forum_Post AS p
left outer join forum_Post AS op
ON op.ParentPostId = p.PostId
WHERE (p.CategoryId = @CategoryId AND p.ParentPostId = 0) AND p.Deleted = 0
GROUP BY p.PostId, op.Date, p.ParentPostId, p.CategoryId, p.UserId, p.Header, p.Date, p.Message, p.Locked, p.Sticky, p.Deleted, p.Anonymous, p.Visit, p.UserName, p.LastPostDate
)
DECLARE @startRow int
DECLARE @endRow int
SELECT @startRow = (@CurrentPage - 1) * @PageSize + 1
SELECT @endRow = @startRow + @pageSize - 1
SELECT * FROM forumPosts f WHERE f.RowNumber BETWEEN @startRow AND @endRow ORDER BY f.Sticky DESC, f.LastPostDate DESC
Notera att jag lagt till p.LastPostDate.
Varför har du med GROUP BY, är det nödvändigt?
VinnarenMedlem sedan sep. 2005833 inlägg Tack, får dock felmeddelandet "Incorrect syntax near '.'." Inte mycket den talade om :(
Ang. GROUP BY så vet jag inte om det behövs, la till de allt eftersom felmeddelanden kom ang det.
Så frågan är då vad syntax felet är?
Peter SMedlem sedan dec. 20025 483 inlägg Oops, så här skall det vara:
CREATE PROCEDURE dbo.forum_GetPostsToCategory
(
@CategoryId int,
@PageSize int = 30,
@UserName varchar(256),
@CurrentPage int = 1
)
AS
BEGIN
WITH forumPosts AS
(
SELECT p.UserName, p.PostId, p.Header, p.Date, p.Locked, p.Sticky, p.Anonymous, p.Visit, p.LastPostDate, ROW_NUMBER() OVER (ORDER BY p.Sticky DESC, p.LastPostDate DESC) AS RowNumber
FROM forum_Post AS p
left outer join forum_Post AS op
ON op.ParentPostId = p.PostId
WHERE (p.CategoryId = @CategoryId AND p.ParentPostId = 0) AND p.Deleted = 0
GROUP BY p.PostId, op.Date, p.ParentPostId, p.CategoryId, p.UserId, p.Header, p.Date, p.Message, p.Locked, p.Sticky, p.Deleted, p.Anonymous, p.Visit, p.UserName, p.LastPostDate
)
SELECT * FROM forumPosts f WHERE f.RowNumber BETWEEN (@CurrentPage - 1) * @PageSize + 1 AND @PageSize * @CurrentPage ORDER BY f.Sticky DESC, f.LastPostDate DESC
VinnarenMedlem sedan sep. 2005833 inlägg tack, verkar funka kanon :)