summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/SemanticScuttle/Service/Vote.php19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/SemanticScuttle/Service/Vote.php b/src/SemanticScuttle/Service/Vote.php
index c0c4995..53bebdc 100644
--- a/src/SemanticScuttle/Service/Vote.php
+++ b/src/SemanticScuttle/Service/Vote.php
@@ -21,10 +21,10 @@
*
* @internal
* Votes are saved in a separate "votes" table.
- * Additionally to that, the voting of a bookmark is also
- * stored in the bookmarks table. This is done to make
- * sure lookups are really fast, since every bookmarks
- * in a list shows its voting.
+ * Additionally to that, the voting and number of votes
+ * of a bookmark is also stored in the bookmarks table.
+ * This is done to make sure lookups are really fast, since
+ * every bookmark in a list shows its voting.
*
* @category Bookmarking
* @package SemanticScuttle
@@ -104,6 +104,12 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
* Returns the number of users that voted for or
* against the given bookmark.
*
+ * @internal
+ * This method uses the votes table to calculate the
+ * number of votes for a bookmark. In normal life, it
+ * is more efficient to use the "bVotes" field in the
+ * bookmarks table.
+ *
* @param integer $bookmark Bookmark ID
*
* @return integer Number of votes
@@ -248,6 +254,7 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
$res = $this->db->sql_query(
$sql='UPDATE ' . $bm->getTableName()
. ' SET bVoting = bVoting + ' . (int)$vote
+ . ' , bVotes = bVotes + 1'
. ' WHERE bId = ' . (int)$bookmark
);
$this->db->sql_freeresult($res);
@@ -283,6 +290,7 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
$res = $this->db->sql_query(
$sql='UPDATE ' . $bm->getTableName()
. ' SET bVoting = bVoting - ' . (int)$vote
+ . ' , bVotes = bVotes - 1'
. ' WHERE bId = ' . (int)$bookmark
);
$this->db->sql_freeresult($res);
@@ -306,6 +314,9 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
$bm = SemanticScuttle_Service_Factory::get('Bookmark');
$query = 'UPDATE ' . $bm->getTableName() . ' as B SET bVoting = '
. '(SELECT SUM(vote) FROM ' . $this->getTableName() . ' as V'
+ . ' WHERE V.bId = B.bId GROUP BY bid)'
+ . ', bVotes = '
+ . '(SELECT COUNT(vote) FROM ' . $this->getTableName() . ' as V'
. ' WHERE V.bId = B.bId GROUP BY bid)';
$this->db->sql_query($query);
}