SQL Server分页查询

Rac*_*oon 3 sql sql-server pagination

Urggggg!很长一段时间我一直在努力奋斗!我可以用MySQL这么容易但不能用SQL Server :(

以下是应该连接在一起的简化表格.

在此输入图像描述

通过使用内部联接语法组合所有这些,我必须编写一个查询,以便将来用于分页(顺便说一下,PHP).假设我需要在2012-10-01和2012-10-30之间拍摄照片的所有ID,姓名和日期信息....每页20人.

在这里实现目标的最简单的查询是什么?(我没试过......但是它太多了,因为我不习惯'不在'的东西...)

您可以忽略性能速度.

谢谢!

Mik*_*iro 6

这是我在SQL Server 2005+中的方法:

SELECT ID, Name, Photo, CreatedDate, rowNum, (rowNum / 20) + 1 as pageNum
FROM (
    SELECT a.ID, a.Name, b.Photo, c.Created_Date
       , Row_Number() OVER (ORDER BY c.Created_Date ASC) as rowNum
    FROM a
       JOIN b ON a.ID = b.ID
       JOIN c ON c.photo = b.photo
    WHERE c.Created_Date BETWEEN '2012-01-1' AND '2012-10-30'
) x
WHERE (rowNum / 20) + 1 = 1
Run Code Online (Sandbox Code Playgroud)

请注意,我使用一个小整数除法技巧来计算页码.

由于2005年之前可悲的是没有row_number(),我会使用带有标识列的中间表:

    SELECT a.ID, a.Name, b.Photo, c.Created_Date
       , identity(int,1,1) as rowNum
    INTO t
    FROM a
       JOIN b ON a.ID = b.ID
       JOIN c ON c.photo = b.photo
    WHERE c.Created_Date BETWEEN '2012-01-1' AND '2012-10-30'
    ORDER BY c.Created_Date ASC
    GO

    ALTER TABLE t ADD pageNum AS rowNum / 20
    GO

    SELECT ID, Name, Photo, Created_Date, rowNum
    FROM t
    WHERE pageNum = 1 
Run Code Online (Sandbox Code Playgroud)

  • Row_Number是在2005年推出的,如果您真的在2013年基于SQL 2000设计应用程序...检查它是否可以选择使用较新的Microsoft SQL Server版本的免费Express Editons. (3认同)