]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Update sorting for user tagged timelines (indexing was bad before and remains bad...
authorBrion Vibber <brion@pobox.com>
Fri, 17 Dec 2010 21:45:40 +0000 (13:45 -0800)
committerBrion Vibber <brion@pobox.com>
Fri, 17 Dec 2010 21:45:40 +0000 (13:45 -0800)
classes/Profile.php

index 62789a489946198b0275441f2f2eebe6ce3278c7..fe1a070bdfb933aad6095944e45374f3a5cbc515 100644 (file)
@@ -215,26 +215,29 @@ class Profile extends Memcached_DataObject
     function _streamTaggedDirect($tag, $offset, $limit, $since_id, $max_id)
     {
         // XXX It would be nice to do this without a join
+        // (necessary to do it efficiently on accounts with long history)
 
         $notice = new Notice();
 
         $query =
           "select id from notice join notice_tag on id=notice_id where tag='".
           $notice->escape($tag) .
-          "' and profile_id=" . $notice->escape($this->id);
+          "' and profile_id=" . intval($this->id);
 
-        if ($since_id != 0) {
-            $query .= " and id > $since_id";
+        $since = Notice::whereSinceId($since_id, 'id', 'notice.created');
+        if ($since) {
+            $query .= " and ($since)";
         }
 
-        if ($max_id != 0) {
-            $query .= " and id <= $max_id";
+        $max = Notice::whereMaxId($max_id, 'id', 'notice.created');
+        if ($max) {
+            $query .= " and ($max)";
         }
 
-        $query .= ' order by id DESC';
+        $query .= ' order by notice.created DESC, id DESC';
 
         if (!is_null($offset)) {
-            $query .= " LIMIT $limit OFFSET $offset";
+            $query .= " LIMIT " . intval($limit) . " OFFSET " . intval($offset);
         }
 
         $notice->query($query);