Rac*_*oon 3 sql sql-server pagination
Urggggg!很长一段时间我一直在努力奋斗!我可以用MySQL这么容易但不能用SQL Server :(
以下是应该连接在一起的简化表格.

通过使用内部联接语法组合所有这些,我必须编写一个查询,以便将来用于分页(顺便说一下,PHP).假设我需要在2012-10-01和2012-10-30之间拍摄照片的所有ID,姓名和日期信息....每页20人.
在这里实现目标的最简单的查询是什么?(我没试过......但是它太多了,因为我不习惯'不在'的东西...)
您可以忽略性能速度.
谢谢!
这是我在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)
| 归档时间: |
|
| 查看次数: |
21784 次 |
| 最近记录: |