2013-10-02 2 views
1

У меня есть таблица users так:Выберите группу с помощью из той же таблицы

id user refid 
1 a null 
2 b 1 
3 c 1 
4 d 2 
5 f 3 

нужно выбрать пользователей, группировка по RefID и подсчета каждого RefID для каждого пользователя. Например,

id user count 
1  a  2 
2  b  1 
3  c  1 

Это то, что я пробовал:

SELECT user, refid, count(*) cnt FROM `users` group by refid 

Однако, это дает мне неправильный пользователя для каждого значения. Как я могу получить правильный пользователь для каждого значения?

+0

Я не понимаю ваш ожидаемый результат. Что пользователь «a» должен делать с refid «1», пользователь «b» связан с refid «2» и т. Д.? В пользовательской таблице пользователь «a» имеет refid «null», а пользователь «b» имеет refid «1». Почему вы ожидаете, что они будут соответствовать тому, что вы показываете в ожидаемых результатах? Можете ли вы объяснить, что именно вы пытаетесь достичь? –

+0

@MikeBrant Я согласен с тобой. Тем не менее, я думаю, что OP означает «id» вместо «refid» в образце. Тогда это будет иметь смысл, поскольку OP будет искать количество рефералов на пользователя (для тех, у кого есть хотя бы один). –

+0

@MostyMostacho правильно относится к id, я сделал изменения – Smith

ответ

1

Я думаю, это то, что вы ищете. В принципе, вам не хватает участия.

select u1.id, u1.user, count(u1.id) cnt from mlm_users u1 
join mlm_users u2 on u1.id = u2.refid 
group by u1.id, u1.user 

Это будет возвращать идентификатор пользователя, и количество обращений каждого из них есть (только для тех, которые имеют, по меньшей мере, одно направление).

+0

спасибо за помощь – Smith

+0

Что делать, если я хочу вернуть как те, у кого есть рефералы, и те, у которых нет 0, я попробовал этот 'SELECT u1. *, count (u1.id) cnt FROM mlm_users u1 LEFT JOIN mlm_users u2 ON u1.id = u2.refid GROUP BY u1.id', который возвращался для тех, у которых нуль равен 1 – Smith

1

Вы должны группировать пользователем и RefID

SELECT user, refid, count(*) cnt FROM `mlm_users` group by user,redid 
Смежные вопросы