如何查询前10行,下次查询表中的其他10行

Ram*_*sad 21 sql postgresql

我的数据库表中有超过500行,具有特定日期.

查询具有特定日期的行.

select * from msgtable where cdate='18/07/2012'
Run Code Online (Sandbox Code Playgroud)

这将返回500行.

如何逐步查询这500行×10行.查询前10行并在浏览器中显示,然后查询下10行并在浏览器中显示?

Pra*_*man 54

只需使用该LIMIT条款.

SELECT * FROM `msgtable` WHERE `cdate`='18/07/2012' LIMIT 10
Run Code Online (Sandbox Code Playgroud)

从下一个电话中你可以这样做:

SELECT * FROM `msgtable` WHERE `cdate`='18/07/2012' LIMIT 10 OFFSET 10
Run Code Online (Sandbox Code Playgroud)

更多的信息OFFSET,并LIMITLIMITOFFSET.

  • 不要使用反引号.在这个例子中你不需要它们,甚至在MySQL中也不需要它们.并且你不应该使用反引号引用标识符,*永远*.请使用符合标准的**双引号**.反引号不符合ANSI-SQL,并且在MySQL之外的任何地方都不起作用 - 您也不必使用它们.使用[ANSI的ANSI_QUOTES设置](http://dev.mysql.com/doc/refman/5.6/en/server-sql-mode.html#sqlmode_ansi_quotes)来摆脱这个问题. (6认同)
  • 如果标识符包含特殊字符或保留字,则只需要*双引号或反引号.使用提到的ANSI_QUOTES设置并使用反引号完成.[MySQL手册词汇表]中的更多信息(http://dev.mysql.com/doc/refman/5.6/en/glossary.html#id1661359). (2认同)
  • 这需要一个“ order by”。 (2认同)

Erw*_*ter 11

LIMIT limit OFFSET offset 将工作.

但是你需要一个稳定的ORDER BY子句,或者对于下一次调用可能会以不同的方式排序值(例如,在对表进行任何写操作之后).

SELECT *
FROM   msgtable
WHERE  cdate = '2012-07-18'
ORDER  BY msgtable_id  -- or whatever is stable 
LIMIT  10
OFFSET 50;  -- to skip to page 6

使用符合标准的日期样式(在我的示例中为ISO 8601),无论您的语言环境设置如何,它都可以使用.

如果在相关列中插入或删除或更改涉及的行,则分页仍将移位.它必须.

为避免这种转变或使用大表更好的性能,请使用更智能的分页策略: