Mysql count and sum from two diferent tables

Posted by Agent_x on Stack Overflow See other posts from Stack Overflow or by Agent_x
Published on 2011-02-28T04:15:07Z Indexed on 2011/02/28 7:25 UTC
Read the original article Hit count: 196

Filed under:
|

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

© Stack Overflow or respective owner

Related posts about mysql

Related posts about count