Question

sql query:

select
    u.username,
        @total_subscribers:=(
            select count(s.id)
                from subscribers as s
                where s.suid = u.uid
        ) as total_subscribers
from users as u
where @total_subscribers > 0

if i remove where @total_subscribers > 0 query will show all users and their total subscribers

but i want to show only those users who have at least 1 subscriber... after i add the where clause and use the defined variable i get an empty result set.

Was it helpful?

Solution

You can do it with group by and having:

select
   u.username,
   count(s.id) as total_subscribers
from users as u
inner join subscribers as s on s.suid = u.uid
group by u.id
having count(s.id) > 0

OTHER TIPS

MySQL does not guarantee the order of evaluation of the session variables in this case.

From the docs:

The order of evaluation for expressions involving user variables is undefined and may change based on the elements contained within a given statement; in addition, this order is not guaranteed to be the same between releases of the MySQL Server

Use this:

SELECT  u.*, COUNT(*)
FROM    users u
JOIN    subscribers s
ON      s.suid = u.uid
GROUP BY
        u.uid

The JOIN makes sure you have at least one subscriber.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top