I recently posted a question about getting last 3 results in table in the correct order. I now want the get all comments apart from the last 3 in the correct order.
Here is my syntax;
SELECT *
FROM (SELECT *
FROM $table
ORDER BY ID DESC
OFFSET 3) AS T
ORDER BY TIME_STAMP
The error I am receiving is:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OFFSET, 3) AS T ORDER BY TIME_STAMP' at line 1
I can't seem to get it to work. Any help much appreciated.
According to the MySQL Documentation:
To retrieve all rows from a certain
offset up to the end of the result
set, you can use some large number for
the second parameter. This statement
retrieves all rows from the 96th row
to the last:
They recommend you use a query such as:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
So in your case, you should try:
SELECT *
FROM (SELECT *
FROM $table
ORDER BY ID DESC
LIMIT 3,18446744073709551615) AS T
ORDER BY TIME_STAMP
Note that you can also use the PostgreSQL compatible version using the keyword OFFSET
:
SELECT *
FROM (SELECT *
FROM $table
ORDER BY ID DESC
LIMIT 18446744073709551615 OFFSET 3) AS T
ORDER BY TIME_STAMP
Just in case you are wondering, 18446744073709551615 = 2^64 - 1
.
You can't use OFFSET without a LIMIT.
A little bulky, but that query worked for me, and not worked without an redundant internal subquery (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