Есть БД MySQL и модуль, который выводит популряных пользователей по количеству комментариев. Выводится лишь указанное число пользователей. Подскажите, пожалуйста, как узнать позицию пользователя, чтобы на выходе было "Ваша позиция: номер".
Заранее благодарен.
Спустя 9 минут, 27 секунд (26.06.2009 - 17:14) waldicom написал(а):
Что значит позиция? Сортировать по количеству уже оставленных комментариев?
Спустя 13 минут, 37 секунд (26.06.2009 - 17:27) Mr.Smith написал(а):
Делаю запрос к БД, сортирую по комментариям и вывожу 5 пользователей, у которых самое большое количество комментариев.
Пример: http://s49.radikal.ru/i124/0906/1f/2d14423809cb.jpg, но в моем случае это топ по комментариям.
Пример: http://s49.radikal.ru/i124/0906/1f/2d14423809cb.jpg, но в моем случае это топ по комментариям.
Спустя 27 минут, 58 секунд (26.06.2009 - 17:55) waldicom написал(а):
И что за цифра 49720 в рисунке выше?
Спустя 5 минут, 57 секунд (26.06.2009 - 18:01) Mr.Smith написал(а):
Позиция (номер) пользователя в рейтинге, который сортируется по количеству заработанных денег.
Спустя 25 минут, 47 секунд (26.06.2009 - 18:27) glock18 написал(а):
можно примерно так
SQL |
SELECT COUNT(*) FROM `users` u JOIN `users` s ON u.`comment_num` > s.`comment_num` WHERE s.`id` = @yourID |
если есть поле, где хранится количество комментариев. Запрос вернет количество пользователей с большим количеством комментариев, то есть нужно увеличить число на 1, чтобы получить место пользователя в рейтинге.
очень советую завести это поле, потому что расчет количества и подсчет рейтинга вкупе сделают запрос намного сложнее (как минимум получается вложенный запрос), а как следствие будет работать много дольше + индексы не будут применены.
у меня еще мысль, что указанный выше запрос может быть лучше разбить на два, потому что в нем тоже не будет применен индекс по comment_num.
может лучше сделать так:
SQL |
SELECT s.`comment_num` FROM `users` s WHERE s.`id` = @yourID; |
и вторым запросом (ты уже знаешь количество комментариев пользователя)
SQL |
SELECT COUNT(*) FROM `users` u WHERE u.`comment_num` > @yourNum; |
здесь оба запроса будут выполнены с индексами (если по comment_num индекс создать, конечно).
Думаю, что на больших таблицах будет существенный выигрыш в скорости, если делать именно так. На малых будет первый чуток быстрее.
Спустя 18 минут, 44 секунды (26.06.2009 - 18:46) Mr.Smith написал(а):
Поле с количеством комментариев есть.
Спустя 4 часа, 30 минут, 41 секунда (26.06.2009 - 23:16) Mr.Smith написал(а):
Код |
$db->query( "SELECT COUNT(*) FROM (".PREFIX."_users JOIN users s ON u.comm_num > s.comm_num) WHERE s.userID = @yourID |
такая запись будет правильна?
Спустя 10 часов, 6 минут, 39 секунд (27.06.2009 - 09:23) glock18 написал(а):
нет, просто возьми то, что я дал и замени таблицы и поля. Собственно, откуда у тебя там скобки после FROM? @yourID - это переменная mysql - ее замени на . $userID . - твой ID пользователя.