From 66ce13a0c7abdd90d96fc2725e3ea69f9e981377 Mon Sep 17 00:00:00 2001 From: Benjamin Brahmer Date: Thu, 24 Sep 2020 17:58:45 +0200 Subject: change statement for deleting items with help from @Talon24 Signed-off-by: Benjamin Brahmer --- lib/Db/ItemMapper.php | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'lib/Db') diff --git a/lib/Db/ItemMapper.php b/lib/Db/ItemMapper.php index f0442aee9..2e08471db 100644 --- a/lib/Db/ItemMapper.php +++ b/lib/Db/ItemMapper.php @@ -357,20 +357,27 @@ class ItemMapper extends NewsMapper while ($row = $result->fetch()) { $size = (int)$row['size']; $limit = $size - $threshold; + $feed_id = $row['feed_id']; if ($limit > 0) { - $params = [false, false, $row['feed_id'], $limit]; - - $sql = 'DELETE FROM `*PREFIX*news_items` ' . - 'WHERE `id` IN (' . - 'SELECT `id` FROM `*PREFIX*news_items` ' . + $params = [false, false, $feed_id, $limit]; + $sql = 'SELECT `id` FROM `*PREFIX*news_items` ' . 'WHERE `unread` = ? ' . 'AND `starred` = ? ' . 'AND `feed_id` = ? ' . 'ORDER BY `id` ASC ' . - 'LIMIT ?' . - ')'; - + 'LIMIT 1 ' . + 'OFFSET ? '; + } + $limit_result = $this->execute($sql, $params); + if ($limit_row = $limit_result->fetch()) { + $limit_id = (int)$limit_row['id']; + $params = [false, false, $feed_id, $limit_id]; + $sql = 'DELETE FROM `*PREFIX*news_items` ' . + 'WHERE `unread` = ? ' . + 'AND `starred` = ? ' . + 'AND `feed_id` = ? ' . + 'AND `id` < ? '; $this->execute($sql, $params); } } -- cgit v1.2.3