mysql - 偏移问题

时间:2010-06-17 07:21:19

标签: mysql syntax offset

我最近发布了一个关于以正确的顺序在表格中获得最后3个结果的问题。我现在希望以正确的顺序将所有评论与最后3条区分开来。

这是我的语法;

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

我收到的错误是:

  

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

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

3 个答案:

答案 0 :(得分:8)

根据MySQL Documentation

  

从特定行检索所有行   偏移到结果的末尾   设置,你可以使用一些大数字   第二个参数。这个说法   从第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

请注意,您还可以使用关键字OFFSET

来使用PostgreSQL兼容版本
SELECT *
FROM (SELECT * 
      FROM $table 
      ORDER BY ID DESC 
      LIMIT 18446744073709551615 OFFSET 3) AS T 
ORDER BY TIME_STAMP

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

OFFSET :offset LIMIT :limit

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

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

LIMIT :limit OFFSET :offset