У меня есть следующие таблицы:Топ-10 завершений коллекции - формула монстра в запросе в MySQL?
пользователя Основные данные (уникальный)
[userid] [name] [etc]
Коллекция пользователя (12:59)
[userid] [game]
Пользователь записи Пьесы (многие ко многим)
[userid] [game] [scenario] [etc]
Основная информация об игре (уникальная)
[game] [total_scenarios]
Я хотел бы выводить таблицу, которая показывает процент завершения сбора игры для Top 10 пользователей в порядке% убывания:
выход Таблица
[userid] [collection_completion]
3 95%
1 81%
24 68%
etc etc
В мой взгляд, последовательность расчета для одного пользователя составляет: всего принадлежит
- захватить пользователя сценарии из
User Collection
вместе сGame Basic Data
иCOUNT(gbd.total_scenarios)
- захватить все записанные пьесы
COUNT(DISTINCT scenario)
для этого пользователя - Разделить все записанные пьесы общего принадлежат сценарии
Так что это 2 запросы и немного массаж PHP в конце. Для списка пользователей, отсортированных по процентам завершения, все становится немного сложнее.
Я полагаю, что я мог бы захватить коллекцию всех пользователей составляет в одном запросе, и все пользователи записали играет в другой, а затем сделать Calcs и сортировать окончательный массив в PHP, но это кажется излишним потенциально делать все, что для 1000+ пользователей, когда я только когда-либо хочу Top 10.
Есть ли в MySQL беспорядочный запрос на монстр, который мог бы все это сделать и LIMIT 10
? Или придерживается того, что PHP обрабатывает основную часть работы в этом случае?
Вы можете хранить процент в другом месте (например, в другой таблице) и обновлять его при внесении изменений в 'User Записано Plays'. Тогда это будет простой JOIN ... ORDER BY. Возможно ли это в вашем сценарии? – VolkerK