Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL how to get number of values from a user?

Tags:

mysql

I have this 3 tables:

Users:
user_id|user_nick
   1   |    a
   2   |    b

Category:
cat_id|cat_type
   1  |    a
   2  |    b
   3  |    c
   4  |    d

Meta:
met_id|met_name|met_user|met_type
   10 |  bla   |    1   |    1
   11 | blabla |    2   |    2
   12 |  foo   |    1   |    3
   13 | blafoo |    2   |    4
   14 | foofoo |    1   |    4
   15 | foobla |    1   |    4

How can I return something like this ?

user_id|met_type|total
   1   |   1    |  1
   1   |   2    |  0
   1   |   3    |  1
   1   |   4    |  2

For just one user and not for all of them.

met_type is a foreign key from Category.

I've tried like this but no success :/

SELECT met_user, met_type, COUNT(*) FROM Meta GROUP BY met_user WHERE met_user = '1'

like image 382
SnakeSheet Avatar asked Dec 19 '25 23:12

SnakeSheet


1 Answers

Query:

SELECT met_user, met_type, count(*)
FROM Meta
WHERE met_user='1'
  GROUP BY met_type;

To get empty groups, you can use generateSeries() here:

SELECT m.met_user, g.meta_type, count(m)
FROM generate_series(1, 4) AS g(meta_type)
  LEFT OUTER JOIN Meta AS m
    ON m.met_user='1'
    AND m.met_type=g.meta_type
GROUP BY g.meta_type, m.met_user
ORDER BY g.meta_type;

Check it out! I made an sql fiddle.

like image 84
Unihedron Avatar answered Dec 22 '25 15:12

Unihedron



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!