2014-10-26 6 views
2

Здравствуй мне нужно, чтобы удалить все старые записи и сохранить 20 первыми, но у меня есть проблемы с моим кодом:Удалить все старые записи

DELETE FROM info WHERE account='".$id."' ORDER BY id DESC LIMIT 20,x 

Мне нужно заменить x с последними ID.

Как я могу получить последний идентификатор?

+1

Если идентификатор инкрементный поле, т.е. последний идентификатор всегда самый большой один, вы могли бы просто использовать «SELECT MAX (ID) ...» – Robert

+1

ли вы имеете в виду, что вы хотите сохранить 20 последних записей , с 20 наивысшими идентификаторами и удалить остальные? – flup

+1

Вы думали об этом. Как часто вы запускаете это? Что делать, если есть только 18 учетных записей. Добавьте один, а затем запустите его? –

ответ

1

Вы можете получить идентификатор, который необходимо удалить, с лимитом 20,1, указанным в последней записи.

SELECT account FROM `info` ORDER BY account DESC LIMIT 20,1 

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

DELETE FROM info WHERE account <= '" . $id . "' 

Убедитесь, что account столбец проиндексированы надлежащим образом!

+1

Prix, вы предлагая альтернативу. –

+0

@ApulGupta больше похоже на решение таким образом, что ему не нужно искать, из какого идентификатора ему нужно удалить, поскольку он автоматически проверит таблицу и возьмет идентификатор, который ему нужно удалить, и если есть меньше, чем 20 записей ничего не вернут, поэтому он может избежать выполнения DELETE. Я также считаю, что он будет запрашивать и читать только последние несколько идентификаторов, а не идти по всей таблице? – Prix

+0

Да, это решение работает, но это хорошо для вызова ajax? просто отредактируйте 'LI MIT 20,20' для 1 запроса, а если ID не пустой, выполните удаление – user3649872

Смежные вопросы