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