Оператор удаления MySQL с ограничением

Я пытаюсь удалить строки из таблицы, но получаю сообщение об ошибке.

DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;

Я получаю эту ошибку на 50:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '50' в строке 1

Понятия не имею что не так.

24
задан Vadim Kotov 2 August 2017 в 15:32
поделиться

1 ответ

Вы не можете указать смещение в предложении DELETE в LIMIT.

Таким образом, единственный способ сделать это - переписать ваш запрос примерно так:

DELETE FROM `chat_messages` WHERE id IN (select id from (select id
                                           FROM `chat_messages`
                                       ORDER BY `timestamp` DESC
                                          LIMIT 20, 50) x)

Предположим, у вас есть первичный ключ id столбец

UPD : вам нужно реализовать двойное вложение, чтобы обмануть mysql, так как он не позволяет выбирать из измененной в данный момент таблицы (спасибо Мартину Смиту)

42
ответ дан 28 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: