summaryrefslogtreecommitdiffstats
path: root/lib/Db/ItemMapper.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Db/ItemMapper.php')
-rw-r--r--lib/Db/ItemMapper.php23
1 files changed, 15 insertions, 8 deletions
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);
}
}