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