使用sql limit从表中反向检索行

时间:2011-09-28 14:17:56

标签: mysql sql pagination

我正在使用MySQL db.Records中的 SQL限制来实现分页

从最后一行向后检索。表

中有数千条记录

我希望一次检索500条记录以显示在页面中。

SELECT * FROM tbl_name ORDER BY some_col DESC

将检索所有记录。

但我不想要所有记录,因为它们的数量已经达到数千个。

如果我使用

SELECT * FROM tbl_name ORDER BY some_col DESC LIMIT 500

它将按降序返回最后500条记录。

但是我找不到一种方法来反向检索下一个500块,从第一个块已经离开的点开始。

2 个答案:

答案 0 :(得分:2)

SELECT
    <column list since I never use *>
FROM
    My_Table
ORDER BY
    some_column DESC
LIMIT 500, 500

编辑:关于你对罗伯特答案的评论......随着偏移变大,性能会降低,但降级明显的点通常非常大。从我在一两天前给出的关于传呼的类似问题给出的答案:

  

我强烈认为用户界面永远不应该允许用户使用   检索一组记录,让他们去(例如)第5000页。   对于人类的大脑而言,这太过于简单,无法找到有用的数据   一次,应该要求进一步过滤。也许让他们看看   前100页(或其他一些数字),但他们必须这样做   更好地约束结果。只是我的意见。

答案 1 :(得分:1)

答案与你的假设数字混淆,所以让我自己做:

假设我们要显示第3页,每页有10条记录。我们想要偏移20条记录(第1页和第2页的记录),然后找到10条记录。格式为:

> SELECT * FROM tbl_name ORDER BY some_col DESC LIMIT 20, 10;

换句话说,就是

LIMIT <offset>, <max results>

了解详情:http://php.about.com/od/mysqlcommands/g/Limit_sql.htm