У нас есть сайт, который содержит базу данных мест. Для каждого места наши пользователи могут выполнить одно из следующих действий, которые мы записываем:
- Просмотр - Просмотр профиля
- РЕЙТИНГ - Оцените по шкале от 1 до 5 звезд
- ОБЗОР - Просмотрите его
- ЗАВЕРШЕНО - Отметьте, что они были там
- СПИСОК ЖЕЛАНИЙ - Отметьте, что они хотят пойти туда
- ЛЮБИМЫЙ - Отметьте, что это один из их любимых
В нашей базе данных по местам каждое место содержит количество раз, которое было выполнено каждое из указанных выше действий, а также средний рейтинг, данный пользователями.
- вид
- отзывы
- avg_rating
- завершено
- 1028 * лист желаний *
- любимый
То, что мы хотим сделать, это генерировать списки лучших мест, используя вышеуказанную информацию. В идеале мы хотели бы иметь возможность генерировать этот список, используя относительно простой SQL-запрос, без необходимости выполнять какую-либо работу по вычислению дополнительных полей или мест в стеке друг против друга. При этом, поскольку у нас есть только около 50 000 мест, мы можем запустить ночное задание cron, чтобы вычислить некоторые поля, такие как ранжирование по разным категориям, если это будет иметь существенное значение в общих результатах наших призовых мест.
Буду признателен, если вы дадите несколько советов о том, как нам следует подумать о том, как поднять лучшие места наверх, какие критерии нам следует придавать более весомому значению, и, учитывая эту информацию, предложить, как должен выглядеть запрос MySQL. для выбора 10 лучших мест.
Следует отметить, что в настоящее время мы меньше озабочены актуальностью популярного места - это означает, что просмотр совокупной информации - это хорошо, и что более свежие данные не нужно взвешивать более тяжело.
Заранее спасибо за помощь и советы!