我最近发布了一个关于以正确的顺序在表格中获得最后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'
我似乎无法让它发挥作用。任何帮助非常感谢。
答案 0 :(得分:8)
从特定行检索所有行 偏移到结果的末尾 设置,你可以使用一些大数字 第二个参数。这个说法 从第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
:
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