Как я могу получить максимальное количество рефералов пользователей с помощью запроса MySQL? - PullRequest
0 голосов
/ 07 августа 2011

Я создал новую систему, которую можно использовать с реферальной системой, но как я могу получить информацию о пользователе, у которого наибольшее количество рефералов?

Я предполагаю, что команда SQL выглядит так:

select * from user where refered_user=max(count(user.refered_user));

Какая правильная запись?

1 Ответ

1 голос
/ 07 августа 2011

Я предполагаю, что ваша пользовательская таблица выглядит примерно так:

TABLE: user
COLUMN: id int PK
COLUMN: refered_user int FK ON user.id

Редактировать: удалено предложение HAVING и добавлен подзапрос

Без использования HAVING для поиска максимального числаиз рефералов, я добавил новый подзапрос, чтобы найти это:

SELECT MAX(referals)
FROM (
  SELECT refered_user, COUNT(1) referals
  FROM user
  GROUP BY refered_user
)

Затем я использовал это внутри запроса, чтобы получить пользователей, которые ссылались на это много раз:

SELECT refered_user, referals
FROM (
  SELECT refered_user, COUNT(1) referals
  FROM user
  WHERE refered_user IS NOT NULL
  GROUP BY refered_user
) AS ruser
WHERE referals = (
  SELECT MAX(referals)
  FROM (
    SELECT refered_user, COUNT(1) referals
    FROM user
    WHERE refered_user IS NOT NULL
    GROUP BY refered_user
  ) AS muser
)

Наконец, я использовал это как запрос JOIN:

SELECT u.*
FROM user u
INNER JOIN (
 SELECT refered_user, referals
 FROM (
  SELECT refered_user, COUNT(1) referals
  FROM user
  WHERE refered_user IS NOT NULL
  GROUP BY refered_user
 ) AS ruser
 WHERE referals = (
  SELECT MAX(referals)
  FROM (
   SELECT refered_user, COUNT(1) referals
   FROM user
   WHERE refered_user IS NOT NULL
   GROUP BY refered_user
  ) AS muser
 )
) AS r ON (r.refered_user = u.id)

Окончание редактирования

Обратите внимание, что несколько пользователей могут иметь одинаковые (максимум)число рефералов, тогда этот запрос может вернуть 0 (для пустой таблицы), 1 или более строк.

...