这是下面的我的mysql查询。通过许多有用的问题和评论,我几乎快步入尾声了。该查询背后的思想是用户提交一个链接,应用程序插入两行,一个插入链接,另一行插入投票(默认投票,为什么用户不为自己提交的文件投票?)然后每一个投票只是另一行在akarma_up或karma_down等于1的票数表中(不久将更改为karma_delta保存在额外的列上。我那里也有流行度算法,这似乎使我的查询感到困惑。运行以下查询可确保出现此错误。
karma_up
karma_down
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表中的业力总和相加,并在其值上附加一列。
ORDER BY
votes
问题在这里:
`ORDER BY karma...
您不能通过定义为别名的东西来订购。试试这个:
`ORDER BY ((SUM(votes.karma_up) - SUM(votes.karma_down)) - 1) / POW((TIMESTAMPDIFF(HOUR, links.created, NOW()) + 2), 1.5) DESC`
希望数据库可以弄清楚不要对其进行两次评估。如果不是,请先使用内部选择而不使用顺序来创建别名,然后使用另一个选择来进行排序。