2

我最近发布了一个关于以正确顺序在表格中获取最后 3 个结果的问题。我现在希望以正确的顺序获取除最后 3 条之外的所有评论。

这是我的语法;

SELECT *
FROM (SELECT * 
      FROM $table 
      ORDER BY ID DESC 
      OFFSET 3) AS T 
ORDER BY TIME_STAMP

我收到的错误是:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'OFFSET, 3) AS T ORDER BY TIME_STAMP' 附近使用正确的语法

我似乎无法让它工作。非常感谢任何帮助。

4

3 回答 3

8

根据MySQL 文档

要检索从某个偏移量到结果集末尾的所有行,您可以为第二个参数使用一些较大的数字。此语句检索从第 96 行到最后一行的所有行:

他们建议您使用以下查询:

SELECT * FROM tbl LIMIT 95,18446744073709551615;

所以在你的情况下,你应该尝试:

SELECT *
FROM (SELECT * 
      FROM $table 
      ORDER BY ID DESC 
      LIMIT 3,18446744073709551615) AS T 
ORDER BY TIME_STAMP

请注意,您还可以使用关键字来使用 PostgreSQL 兼容版本OFFSET

SELECT *
FROM (SELECT * 
      FROM $table 
      ORDER BY ID DESC 
      LIMIT 18446744073709551615 OFFSET 3) AS T 
ORDER BY TIME_STAMP

以防万一你想知道,18446744073709551615 = 2^64 - 1

于 2010-06-17T07:28:10.920 回答
5

没有 LIMIT 就不能使用 OFFSET。

有点笨重,但该查询对我有用,如果没有冗余的内部子查询(mysql 5.0.90)就无法工作

select * from $table 
where id not in (
  select id from (
    select id from languages order by id DESC LIMIT 3
  ) l1
) order by time_stamp
于 2010-06-17T07:23:02.597 回答
0

因为我复制了同样的问题:

OFFSET :offset LIMIT :limit

来自现有查询,这在 Postgres 中有效。

显然顺序在 MySQL 中很重要,所以颠倒顺序对我有用:

LIMIT :limit OFFSET :offset 
于 2019-08-22T02:18:36.290 回答