Можно ли выбрать пользователя с максимальным число рефов в 5-ти уровневой рефке?

Здравствуйте!
Возможно ли вообще такое? Есть у меня таблица user, есть у меня в ней ключи id и idUpline. (upline - это тот, кто тебя привёл. То есть ты его реф). Можно ли как-то выбрать 10 пользователей, у которых больше всего людей на всех 5-ти уровнях рефки?

P.S.: Запрос, считающий личных рефералов, выглядит так:
SELECT mirror.username,COUNT(t1.idUpline) AS count
FROM user t1
LEFT JOIN user mirror ON t1.idUpline=mirror.id
GROUP BY t1.idUpline
ORDER BY count DESC
LIMIT 10

Вернёт 10 пользователей с максимальным кол-вом рефов первого уровня. Даже если загнать этот запрос в PHP коде в цикл и прогнать 5 раз, всё равно результат будет не тот. Ведь десятка на первом кругу будет строиться на основе кол-ва рефов первого уровня. А это не совсем то.

Заранее спасибо
  • Вопрос задан
  • 2328 просмотров
Пригласить эксперта
Ответы на вопрос 1
@snipsnap
Да можно, используя рекурсивную конструкцию WITH для T-SQL.
Вот моя табличка:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table_3](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nchar](30) NOT NULL,
	[Referal] [int] NULL,
	[Payment] [real] NULL
) ON [PRIMARY]
GO

Соответственно:
ID - ID текущего пользователя.
Referal - ID пригласившего, если пригласившего нет, то NULL.
Вот такой запрос для каждого ID выводит количество рефералов:
WITH T1 AS
(
  SELECT ID, Name, Referal, 0 AS distance, ID as TopParent
  FROM dbo.Table_3

  UNION ALL

  SELECT m.ID, m.Name, m.Referal, s.distance + 1 AS distance, S.TopParent
  FROM T1 AS S
    JOIN dbo.Table_3 AS M
      ON M.Referal = S.ID
),
T2 as
(select distinct TopParent as ID, count(ID)-1 as Members 
 from T1 
 group by TopParent )
 select * from T2 order by ID
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы