Сравните каждый из баллов событий с тем из профиля пользователя.Чем ниже отклонение, тем лучше событие соответствует интересам пользователя.
В SQL это может выглядеть примерно так:
SELECT ... FROM `events` WHERE ...
ORDER BY (
ABS(`culture` - $culture)
+ ABS(`sports` - $sports)
+ ABS(`fun` - $fun)
+ ...
) ASC
Вы также можете взвесить результаты в соответствии с распределением баллов в профиле пользователя.Это означает, что если у пользователя $culture = 10
и все остальные баллы 0, он особенно интересуется культурой, и вы можете получить лучшие результаты с
SELECT ... FROM `events` WHERE ...
ORDER BY (
(ABS(`culture` - $culture) * $cultureImportance)
+ (ABS(`sports` - $sports) * $sportsImportance)
+ (ABS(`fun` - $fun) * $funImportance)
+ ...
) ASC
, где важность каждого балла - это отклонение этого балла отсреднее значение всех баллов пользователя.
Вы также можете добавить «специю» к значениям важности, например, для продвижения спортивных событий во время суперкубка, чтобы сделать ваш сайт более привлекательным.