On Thu, Jul 11, 2002 at 11:30:16AM +0200, andy wrote:
> 
> Table 1 user_table
> id
> points
> 
> Table 2 reports
> report_id
> user_id
> rating
> 
> The goal is to associate every user extra 50 points if he has a top 10
> report.
> Top 10 report means the 10 reports with the highest ranking. This value is
> always changing, thats why I did not include it to the other points.
> Now that we have the users with the additional points we could add them to
> the total points of the user and then find out the 5 users with the highest
> total points.

There are probably a couple ways to do this.  This is the one that hits me
off the top of my head, assuming you're using a version of MySQL which
can't do subqueries.

Now, all of this is untested, so my query syntax may be off a tad, but 
it'll give you the idea of where to go...

Do the following intermittently on a scheduled basis:

1) Make a third table.  It'll hold temporary data.
     user_id
     totalscore
2) LOCK TABLES Table3 READ
3) DELETE FROM Table3 WHERE 1=1
4) INSERT INTO Table3 (user_id, totalscore) SELECT user_id, 20 AS sc
     FROM Table2 ORDER BY rating LIMIT 10
5) INSERT INTO Table3 (user_id, totalscore) SELECT id, points
     FROM Table1
6) UNLOCK TABLES

Now, whenever you want to generate the top 5 list use the following query
   SELECT user_id, SUM(totalscore) AS thescore FROM Table3
   GROUP BY user_id ORDER BY SUM(totalscore) LIMIT 5

If you can create subqueries, then you don't need the third table and can 
write one nice query, something like this...

SELECT id, sc+points AS totalscore FROM Table1
LEFT JOIN (SELECT user_id, 20 AS sc FROM Table2 ORDER BY rating LIMIT 10)
ON (Table1.id = Table2.user_id)
ORDER BY sc+points LIMIT 5

--Dan

-- 
               PHP classes that make web design easier
        SQL Solution  |   Layout Solution   |  Form Solution
    sqlsolution.info  | layoutsolution.info |  formsolution.info
 T H E   A N A L Y S I S   A N D   S O L U T I O N S   C O M P A N Y
 4015 7 Av #4AJ, Brooklyn NY     v: 718-854-0335     f: 718-854-0409

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to