On 22-Dec-2004 Michael J. Pawlowsky wrote:
> I’m trying to come up with a more efficient method to do this.
> I have a table where people enter some info into the table.
> 

<snip> 

> I would like to allow the users to be able to see where they stand
> rank 
> wise with everyone else.
> Right now I basically do a SELECT count(1) as entries, user_id GROUP
> BY 
> user_id ORDER BY entries DESC.

<snip> 

> I was wondering if anyone could think of a better way to do this.
> 

Add a rank column that gets recalculated after each entry is added?

php code:

function calc_user_ranks($limit=100) {
        global $dbconn;

        $dbconn->Execute('SET @x:=0');
        $qry = "SELECT (@x:[EMAIL PROTECTED]) AS rank, user_id, count(1) AS 
entries 
          FROM user 
          GROUP BY user_id ORDER BY entries DESC LIMIT $limit";
        $dbconn->Execute($qry);
        while($row = $r->FetchRow()) 
                $rank[$row['user_id']] = $row['rank'];
        $dbconn->Execute('UPDATE user SET rank=0');
        foreach($rank as $id => $r) {
                $qry = "UPDATE user SET rank=$r WHERE user_id=$id";
                $dbconn->Execute($qry);
        }
}

Regards,
-- 
Don Read                                     [EMAIL PROTECTED]
-- It's always darkest before the dawn. So if you are going to 
   steal the neighbor's newspaper, that's the time to do it.

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to