下面是我的mysql查询。通过许多有用的问题和评论,我几乎在旅程的最后。这个查询背后的想法是用户提交一个链接,应用程序插入两行,一行插入链接,另一行插入投票(默认投票,为什么用户不投票为自己的提交?)然后每一次投票只是另一行在投票表中,karma_up
或karma_down
等于1(很快就会更改为karma_delta
以保存额外的列。我也有流行算法在那里似乎请查询我的查询。运行以下查询可以保证这个错误。
#1247 - Reference 'karma' not supported (reference to group function)
这个问题的大部分内容都是为了获得业力
SELECT links.*, (SUM(votes.karma_up) - SUM(votes.karma_down)) AS karma
FROM links, votes
WHERE links.id = votes.link_id
GROUP BY votes.link_id
ORDER BY (karma - 1) / POW((TIMESTAMPDIFF(HOUR, links.created, NOW()) + 2), 1.5) DESC
LIMIT 0, 100
如果没有ORDER BY
部分的流行度算法,则查询会完美运行,从votes
表中添加总和业力,并使用它的值添加额外列。
答案 0 :(得分:8)
问题在于:
`ORDER BY karma...
您无法通过定义为别名的内容进行排序。试试这个:
`ORDER BY ((SUM(votes.karma_up) - SUM(votes.karma_down)) - 1) / POW((TIMESTAMPDIFF(HOUR, links.created, NOW()) + 2), 1.5) DESC`
希望DB能够弄清楚不要对它进行两次评估。如果没有,请先使用不带顺序的内部选择来创建别名,然后使用另一个选择进行排序。