diff options
| author | cweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2010-02-20 11:39:03 +0000 | 
|---|---|---|
| committer | cweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2010-02-20 11:39:03 +0000 | 
| commit | 17374001b8ccfe806851862c91b29671ba998828 (patch) | |
| tree | 624a684efb80cb7318ec6c51dd733311f64917de /src/SemanticScuttle/Service/Bookmark.php | |
| parent | 6a2f1f4f573613400479d427c32b083a7274158b (diff) | |
| download | semanticscuttle-17374001b8ccfe806851862c91b29671ba998828.tar.gz semanticscuttle-17374001b8ccfe806851862c91b29671ba998828.tar.bz2 | |
add SemanticScuttle_Service_Bookmark::bookmarksExist() method to check for existance of multiple bookmarks at once for future sql optimization
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@680 b3834d28-1941-0410-a4f8-b48e95affb8f
Diffstat (limited to 'src/SemanticScuttle/Service/Bookmark.php')
| -rw-r--r-- | src/SemanticScuttle/Service/Bookmark.php | 56 | 
1 files changed, 55 insertions, 1 deletions
| diff --git a/src/SemanticScuttle/Service/Bookmark.php b/src/SemanticScuttle/Service/Bookmark.php index 10b0b8b..a1bb1a5 100644 --- a/src/SemanticScuttle/Service/Bookmark.php +++ b/src/SemanticScuttle/Service/Bookmark.php @@ -312,7 +312,7 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService       * @return boolean True when the bookmark with the given URL       *                 exists for the user, false if not.       */ -    function bookmarkExists($address = false, $uid = null) +    public function bookmarkExists($address = false, $uid = null)      {          if (!$address) {              return false; @@ -347,6 +347,60 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService      /** +     * Checks if the given addresses exist +     * +     * @param array   $addresses Array of addresses +     * @param integer $uid       User ID the addresses shall belong to +     * +     * @return array Array with addresses as keys, true/false for existence +     *               as value +     */ +    public function bookmarksExist($addresses, $uid = null) +    { +        if (count($addresses) == 0) { +            return array(); +        } + +        $hashes = array(); +        $sql = '(1'; +        foreach ($addresses as $key => $address) { +            $hash = md5($this->normalize($address)); +            $hashes[$hash] = $address; +            $sql .= ' OR bHash = "' +                . $this->db->sql_escape($hash) +                . '"'; +        } +        $sql .= ')'; +        if ($uid !== null) { +            $sql .= ' AND uId = ' . intval($uid); +        } + +        $sql = 'SELECT bHash, COUNT(*) as "count" FROM ' +            . $this->getTableName() +            . ' WHERE ' . $sql +            . ' GROUP BY bHash'; + +        if (!($dbresult = $this->db->sql_query($sql))) { +            message_die( +                GENERAL_ERROR, 'Could not get bookmark counts', '', +                __LINE__, __FILE__, $sql, $this->db +            ); +        } + +        $existence = array_combine( +            $addresses, +            array_fill(0, count($addresses), false) +        ); +        while ($row = $this->db->sql_fetchrow($dbresult)) { +            $existence[$hashes[$row['bHash']]] = $row['count'] > 0; +        } + +        return $existence; +    } + + + +    /**       * Adds a bookmark to the database.       *       * @param string  $address     Full URL of the bookmark | 
