mysql - проблема смещения - PullRequest
2 голосов
/ 17 июня 2010

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

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

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

Не получается заставить его работать,Любая помощь высоко ценится.

Ответы [ 2 ]

8 голосов
/ 17 июня 2010

Согласно документации 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.

5 голосов
/ 17 июня 2010

Вы не можете использовать СМЕЩЕНИЕ без ОГРАНИЧЕНИЯ.

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