Mysql count and sum from two diferent tables
- by Agent_x
Hi all, i have a problem with some querys in php and mysql:
I have 2 diferent tables with one field in common:
table 1
id | hits | num_g | cats | usr_id |active
1  |  10  |  11  |  1   | 53     | 1
2  |  13  |  16  |  3   | 53     | 1
1  |  10  |  22  |  1   | 22     | 1
1  |  10  |  21  |  3   | 22     | 1
1  |   2  |   6  |  2   | 11     | 1
1  |  11  |  1  |  1    |  11     | 1
table 2
id | usr_id | points
1  |  53    |  300
Now i use this statement to sum just the total from the table 1  every id count + 1 too
SELECT usr_id, COUNT( id ) + SUM( num_g + hits ) AS tot_h FROM table1 WHERE usr_id!='0' GROUP BY usr_id ASC LIMIT 0 , 15
and i get the  total for each usr_id
usr_id| tot_h |
53    | 50
22    | 63
11    | 20
until here all is ok, now i have a second table with extra points (table2)
I try this:
SELECT usr_id, COUNT( id ) + SUM( num_g + hits ) + (SELECT points FROM table2 WHERE usr_id != '0' ) AS tot_h FROM table1 WHERE usr_id != '0' GROUP BY usr_id ASC LIMIT 0 , 15
but it seems to sum the 300 extra points to all users:
usr_id| tot_h |
53    | 350
22    | 363
11    | 320
Now how i can get the total like the first try but + the secon table in one statement? because now i have just one entry in the second table but i can be more there.
thanks for all the help.
===============================================================================
hi thomas thanks for your reply, i think is in the right direction, but im getting weirds results, like 
usr_id |  tot_h
22  |   NULL   <== i think the null its because that usr_id as no value in the table2
53     |    1033 
Its like the second user is getting all the the values. then i try this one:  
      SELECT table1.usr_id, COUNT( table1.id ) + SUM( table1.num_g + table1.hits + table2.points ) AS tot_h
FROM table1
LEFT JOIN table2 ON table2.usr_id = table1.usr_id
WHERE table1.usr_id != '0'
AND table2.usr_id = table1.usr_id
GROUP BY table1.usr_id ASC          
Same result i just get the sum of all values and not by each user, i need something like this result:
usr_id | tot_h
53     |  53    <====  plus 300 points on table1
22      | 56    <====  plus 100 points on   table2
/////////the result i need ////////////
usr_id | tot_h
53     |  353    <====  plus 300 points on table2
22      | 156    <====  plus 100 points on   table2
I think the structure need to be something like this
Pseudo statements ;)
from table1 count all id to get the number of record where the  usr_id are then sum hits + num_g and from table2 select the extra points where the usr_id are the same as table1 and get teh result:
usr_id | tot_h
53    |  353
22   |  156