[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос по работе с MySQL
Mr.Smith
Здравствуйте!
Есть БД 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, но в моем случае это топ по комментариям.

Спустя 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 пользователя.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.