Подтвердить что ты не робот

Лимит подзапроса mySQL

Это, вероятно, легкий... как я могу добиться того, что хочу с этим запросом:

delete from posts where id not in
(SELECT id FROM posts order by timestamp desc limit 0, 15)

поэтому, говоря в двух словах, я хочу удалить каждый пост, который не находится в последних 15.

Когда я пытаюсь выполнить этот запрос, я получаю, что MySQL еще не поддерживает "LIMIT и IN/ALL/ANY/SOME subquery

ИЗМЕНИТЬ

mySQL Server version: 5.5.8
mySQL Client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $
Error: #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
4b9b3361

Ответ 1

Попробуйте следующее:

DELETE 
FROM posts 
WHERE id not in (
      SELECT * FROM (
            SELECT id 
            FROM posts 
            ORDER BY timestamp desc limit 0, 15
      ) 
      as t);

Ответ 2

Вы можете попробовать следующее:

DELETE 
    p1.* 
FROM 
    posts p1 INNER JOIN 
    (SELECT 
            id 
    FROM 
            posts 
            ORDER BY timestamp DESC 
            LIMIT 0, 15
    ) AS p2 
ON p1.id = p2.id;

Ответ 3

Так как новейшие 15 всегда будут поступать с первых 15, если вы закажете их по убыванию. Вы можете просто удалить любой идентификатор, который не попал в первый 15. Как я просто попробовал, и он работал нормально. Надеюсь, это поможет кому-то

Delete from `table` where id not in (SELECT * FROM (Select id from `table` order by id desc limit 15) as derivedTable);