sql – Django中的复杂排序
发布时间:2020-12-12 07:25:37 所属栏目:MsSql教程 来源:网络整理
导读:所以我拉了一个链接列表,我试图按人气排序这些链接.我正在使用黑客新闻算法: Y Combinator's Hacker News:Popularity = (p - 1) / (t + 2)^1.5Votes divided by age factor.Wherep : votes (points) from users.t : time since submission in hours.p is sub
所以我拉了一个链接列表,我试图按人气排序这些链接.我正在使用黑客新闻算法:
Y Combinator's Hacker News: Popularity = (p - 1) / (t + 2)^1.5 Votes divided by age factor. Where p : votes (points) from users. t : time since submission in hours. p is subtracted by 1 to negate submitter's vote. Age factor is (time since submission in hours plus two) to the power of 1.5.factor is (time since submission in hours plus two) to the power of 1.5. 我通过使用order by在MySQL和PHP Framework中完成了这个 (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的extra():popular_links = Link.objects.select_related().annotate(karma_total = Sum('vote__karma_delta')) popular_links = popular_links.extra( select = {'popularity': '(karma_total - 1) / POW((TIMESTAMPDIFF(HOUR,1.5)',},order_by = ['-popularity',] ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |