PHP MySQLi Рейтинговая позиция - PullRequest
0 голосов
/ 20 апреля 2011

Хорошо. Это мой первый раз, когда я задаю вопрос здесь, так что держись со мной ^ _ ^

Я нахожусь в процессе разработки своего рода табло.

Структура таблицы: ID, UID, точки, где UID связан с учетной записью пользователя.

Теперь у меня это работает несколько, но мне нужна одна конкретная вещь, чтобы этот запрос был почти идеальным. Чтобы выбрать пользователя на основе ранга.

Я покажу вам мой SQL.

SELECT *, @rownum := @rownum + 1 AS `rank` FROM 
            (SELECT * FROM `points_table` `p` 
             ORDER BY `p`.`points` DESC 
             LIMIT 1) 
        `user_rank`, 
        (SELECT @rownum := 0) `r`, `accounts_table` `a`, `points_table` `p`
        WHERE `a`.`ID` = `p`.`UID`

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

Заранее спасибо всем, кто может помочь в моей проблеме:]

1 Ответ

1 голос
/ 20 апреля 2011

Я думаю, что здесь есть две проблемы. Из того, что я могу собрать, вы хотите объединить две таблицы, упорядочить их по точкам и затем вернуть n-ую запись. Я собрал НЕПРОВЕРЕННЫЙ запрос. Внутренний запрос выполняет объединение двух таблиц, а внешний запрос указывает, что возвращается только определенная строка.

В этом примере возвращается 4-я строка.

SELECT * FROM
(SELECT *, @rownum := @rownum + 1 AS rank
FROM `points_table` `p` 
JOIN `accounts_table` `a` ON a.ID = p.UID,
(SELECT @rownum:=0) r
ORDER BY `p`.`points` DESC) mytable
WHERE rank = 4

Надеюсь, это работает для вас!

Я внес изменение в ответ, который, мы надеемся, решит эту проблему. Кстати, используете ли вы php или mysql для получения звания, вы по-прежнему сильно напрягаете ресурсы. Прежде чем mysql сможет вычислить ранг, он должен создать таблицу для каждого пользователя и затем упорядочить их. Таким образом, вы просто перемещаете работу из одной области в другую. По мере увеличения количества пользователей увеличивается время выполнения запроса независимо от вашего решения. MySQL, вероятно, займет немного больше времени для выполнения вычислений, поэтому PHP, вероятно, является более идеальным решением. Но я также знаю из опыта, что иногда посторонние детали мешают вам иметь полностью элегантное решение. Надеюсь, измененный код работает.

...