Вот как Пол Грэм описывает алгоритм ранжирования для Hacker News:
News.YC просто
(p - 1)/(t + 2) ^ 1,5
где p = точки и t = возраст в часах
Я хотел бы сделать это в чистом mySQL, учитывая следующие таблицы:
- Столбцы с полями postID (индекс) и postTime (временная метка).
- Таблица голосов с полями voteID (index), postID и vote (integer, 0 или 1).
Идея поля для голосования заключается в том, что голоса могут быть отменены. Для целей рейтинга голос = 0 эквивалентен отсутствию голоса. (Все голоса - это upvotes, не такие вещи, как downvotes.)
Вопрос заключается в том, как построить запрос, который возвращает верхние N идентификаторов postID, отсортированные по формуле Пола Грэма. Всего около 100 тыс. Сообщений, поэтому, если вы думаете, что кеширование баллов или что-то понадобится, я бы с удовольствием услышал об этом.
(Очевидно, что это не ракетостроение, и я, конечно, могу это понять, но я подумал, что кто-то, кто ест SQL на завтрак, обед и ужин, может просто сбить его с ног. И, похоже, это полезно для StackOverflow.)
Похожие вопросы: