aboutsummaryrefslogtreecommitdiff
path: root/app/models/Entry.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-05 18:37:41 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-05 18:37:41 +0100
commitfdb2b7588e2326dc36823d7fac5f88ff8ebee2ec (patch)
tree5b0e7de61a71ce785ac41f198e76c38de9d793ef /app/models/Entry.php
parentfb0c0868a44ee10a43703c27f18aa6fcde0f4211 (diff)
Actualize : évite d'ajouter les articles déjà connus
Dans la plupart des cas, évite d'ajouter les articles déjà présents dans la base de données, en faisant une pré-requête (une par flux, pas une par article). Par exemple, si un flux RSS fournit 20 articles, alors la pré-requête charge une liste d'exclusion de 20+2 identifiants d'articles. Ce patch réduit considérablement le nombre de requêtes et la charge de la base de données durant les mises à jour, et en particulier le trafic réseau entre PHP et la base de données. Les mises à jour sont du coup aussi plus rapides.
Diffstat (limited to 'app/models/Entry.php')
-rwxr-xr-xapp/models/Entry.php8
1 files changed, 8 insertions, 0 deletions
diff --git a/app/models/Entry.php b/app/models/Entry.php
index 2829a3586..e835f9aed 100755
--- a/app/models/Entry.php
+++ b/app/models/Entry.php
@@ -439,6 +439,14 @@ class EntryDAO extends Model_pdo {
public function listByFeed ($feed, $state, $order = 'high_to_low', $limitFromId = '', $limitCount = '') {
return $this->listWhere (' WHERE id_feed = ?', $state, $order, $limitFromId, $limitCount, array ($feed));
}
+
+ public function listLastIdsByFeed($id, $n) {
+ $sql = 'SELECT id FROM ' . $this->prefix . 'entry WHERE id_feed=? ORDER BY date DESC LIMIT ' . intval($n);
+ $stm = $this->bd->prepare ($sql);
+ $values = array ($id);
+ $stm->execute ($values);
+ return $stm->fetchAll (PDO::FETCH_COLUMN, 0);
+ }
public function countUnreadRead () {
$sql = 'SELECT is_read, COUNT(*) AS count FROM ' . $this->prefix . 'entry e INNER JOIN ' . $this->prefix . 'feed f ON e.id_feed = f.id WHERE priority > 0 GROUP BY is_read';