【发布时间】:2010-12-30 04:20:22
【问题描述】:
所以我正在提取链接列表,并尝试按受欢迎程度对这些链接进行排序。我正在使用 Hacker News 算法:
Y Combinator 的黑客新闻: 人气 = (p - 1) / (t + 2)^1.5 选票除以年龄因素。 在哪里 p :来自用户的投票(积分)。 t :自提交以来的时间,以小时为单位。 p 减 1 以否定提交者的投票。 年龄因子是(以小时为单位的提交时间加 2)的 1.5 次方。因子是(以小时为单位的提交时间加 2)的 1.5 次方。我在 MySQL 和 PHP 框架中使用 order by 完成了这项工作
(SUM(votes.karma_delta) - 1) / POW((TIMESTAMPDIFF(HOUR, links.created, NOW()) + 2), 1.5) DESC
现在我正在使用 PostgreSQL 和 Django。我知道这个确切的 SQL 可能行不通,但我可以稍后进行转换。我遇到的问题是我不知道如何在 Django 中获得如此复杂的 order_by。我的观点有一个完美的:
popular_links = Link.objects.select_related().annotate(karma_total = Sum('vote__karma_delta'))
如果我不需要的话,我真的不想通过使用原始 sql 来解决这个问题。
总结一下我的问题:如何在 Django 中创建复杂的 order_by?
编辑
会有分页,我真的只想对我拉的条目进行排序。在 Python 中实际进行排序会更好吗?
【问题讨论】:
标签: sql django postgresql