我有一个嵌套在PHP while循环中的数组,它多次输出一组论坛帖子。我想基于算法对数组结果进行排序 - 但是我不想对算法进行硬编码,因此我可以在以后测试不同的变量。注意 - 我不打算对数组中的项进行排序,而是在循环时输出数组20次以上的最终输出。
目前我有2个表 - 带有行(3000 +)的论坛表:
id | name | date_add | votes | ... |
1 | Test Name | 1234567890 | 2 | ... |
... | ... | ... | ... | ... |
另一个表包含我想要传递给计算的算法变量,只有一行:
id | vote_reduction | time_variable | gravity |
1 | 1 | 2 | 1.8 |
我正在使用的特定算法根据日志的生成时间(以小时为单位),有多少票数和重力因子对信息进行排序,使其对时间更敏感。在全: (vote - vote_reduction)/((小时直播+时间变量)^重力)
到目前为止,我已经设法做到这一点,出现了问题,但我无法弄清楚:
SELECT forum.*,
((forum.votes - algorithm.vote_reduction)/POW(((TIMESTAMPDIFF(HOUR, SYSDATE(), forum.date_add)) + algorithm.time_variable),algorithm.gravity)) AS algorithm.al,
forum.name, forum.id
FROM forum as forum
LEFT JOIN algorithm AS algorithm ON (algorithm.id='1')
ORDER BY algorithm.al
有什么想法吗?
答案 0 :(得分:1)
我还没有测试过算法的结果,但是如果只删除算法,查询会返回al的结果。来自algorithm.al。我不认为你可以创建一个像它是表的一部分的列别名。令我困惑的是你说它在你的机器上运行。它不是在SQL Fiddle上运行而且是在抛出错误。
SELECT forum.*,
((forum.votes - algorithm.vote_reduction)/POW(((TIMESTAMPDIFF(HOUR, SYSDATE(), forum.date_add)) + algorithm.time_variable),algorithm.gravity)) AS al
FROM forum AS forum
LEFT JOIN algorithm AS algorithm ON (algorithm.id='1')
ORDER BY al
答案 1 :(得分:0)
代码中有一些错误如下:
修复:
SELECT forum.*, TIMESTAMPDIFF(HOUR, from_unixtime(bd.date_add), NOW()) as 'timedif'
((forum.votes - alg.vote_reduction)/POW(('timedif' + alg.time_variable),alg.gravity)) AS 'al'
FROM forum AS forum
LEFT JOIN algorithm AS 'alg' ON (alg.id='1')
ORDER BY al