тех юзеров, у которых рейтинг больше Н
Юзер {рейтинг}
Реактионс {автор, таргет}
Делается или джойном или подзапросом
Типа
Селект * фром реактионс вере автор ин (селект айди фром юзерс вере рейтинг > Н)
Рейтинг в сущности юзера можно сделать атрибутом, который или пересчитывается раз в какое-то время, или обновляется триггером. Все зависит от особенностей проекта
То есть хранить текущее значение рейтинга всех пользователей? И когда кто то делает изменение своей реакции для кого то, то придется по цепочке пересчитывать рейтинги почти всей базы?
А это должно сразу всех аффектить ?
Да, это я описывал в постановке задачи. Может быть ситуация когда рейтинг пользователя опускается ниже порога, или поднимается выше порога, и это распространится волнообразно в каких то ситуациях.
Можно не пересчитывать всех, а вычислять рейтинг на лету. А предрасчитанный рейтинг использовать только для фильтрации
Высчитывать рейтинг на лету, это пересчитать всю базу для каждого пользователя при каждом запросе
Так, и что ? Грамотные индексы должны решить все проблемы
Это точно так должно работать? Допутим есть п1 и п2 и п3 с рейтингами 4 4 5 п3 ставит + п2 = 4 5 5 п2 ставит - п3 = 4 5 4 но оценка последнего становится неактуальная, и оценка становится 4 4 4 а значит уменьшение становится невозможным и оценка должна стать 4 4 5, значит прошлая оценка становится п3 становится актуальная и рейтинг становится 4 5 5, а значит оценка от п2 начинает работать и становится 4 5 4... продолжать до полного удовлетворения. Так что или все поставленные оценки даже после уменьшения остаются, или удачи.
ну да, система подсчета странная, честно говоря )
Похоже на то. Как эту схему можно улучшить?
Там в самом конце есть вариант. Все поставленные оценки, пока пользователь 5+ — остаются. Т.е. если оценка поставлена, то её уже может изменить только другой 5+, но не какие-либо автоматические распространения. Не вижу причин усложнять сильнее, как минимум сейчас, может у Вас там больше данных и придётся усложнять.
Обсуждают сегодня