Ответ 1
Попробуйте следующее:
DELETE
FROM posts
WHERE id not in (
SELECT * FROM (
SELECT id
FROM posts
ORDER BY timestamp desc limit 0, 15
)
as t);
Это, вероятно, легкий... как я могу добиться того, что хочу с этим запросом:
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'
Попробуйте следующее:
DELETE
FROM posts
WHERE id not in (
SELECT * FROM (
SELECT id
FROM posts
ORDER BY timestamp desc limit 0, 15
)
as t);
Вы можете попробовать следующее:
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;
Так как новейшие 15 всегда будут поступать с первых 15, если вы закажете их по убыванию. Вы можете просто удалить любой идентификатор, который не попал в первый 15. Как я просто попробовал, и он работал нормально. Надеюсь, это поможет кому-то
Delete from `table` where id not in (SELECT * FROM (Select id from `table` order by id desc limit 15) as derivedTable);