2010-06-17 2 views
2

Недавно я опубликовал вопрос о получении последних 3 результатов в таблице в правильном порядке. Теперь я хочу получить все комментарии отдельно от последних 3 в правильном порядке.mysql - проблема смещения

Вот мой синтаксис;

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

Ошибка я получаю это:

У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для корректного синтаксиса использовать вблизи «OFFSET, 3) AS T ORDER BY TIME_STAMP» в строке 1

Я не могу заставить его работать. Любая помощь очень ценится.

ответ

8

Согласно MySQL Documentation:

Чтобы получить все строки с определенного смещение до конца результата set, вы можете использовать некоторое количество для второго параметра. Это утверждение извлекает все строки из 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.

+0

Я думаю, что ОП ищет противоположное. Получение всех записей, за исключением последних 3. –

+0

@ Даниэль: Это то, что делает это утверждение. Он пропускает первые 3 и возвращает остальные. – Senseful

+0

, который взламывает и хорошо объясняет, спасибо! –

4

Вы не можете использовать OFFSET без LIMIT.

Немного громоздкий, но этот запрос работал для меня, и не работал без избыточного внутреннего подзапроса (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 
Смежные вопросы