mysql - 提要流行度算法返回未知列错误
问题描述
我对SQL很陌生,所以请耐心等待这个相当菜鸟的问题。
最近,我想出了一种算法,以便按照流行程度和衰减顺序对我网站上的帖子进行排名。其中L = likes, R = reposts, C = comments, P = plays, Tc = time created in hours and Tu = time updated in hours
,这是公式:
((L + R) / 2) + 0.05C + 0.002P + 0.75) / (1 + Tc^1.8 - (Tc - Tu)^1.2)
我试图用我所拥有的知识将其转换为基本的MySQL查询,这就是我想出的:
SELECT
Upload.upload_id,
COUNT(L.like_id) AS c_likes,
COUNT(R.repost_id) AS c_reposts,
COUNT(C.comment_id) AS c_comments,
(
((c_likes + c_reposts) / 2) + (0.05 * c_comments) + (0.002 * Upload.upload_plays) + 0.75
) /
(
1
+ POWER((TIMESTAMPDIFF(MINUTE, CURRENT_TIMESTAMP, Upload.upload_date) / 60), 1.8)
- POWER(0, 1.2) /* power is 0 for now as a placeholder */
) AS u_score
FROM
uploads Upload
LEFT JOIN likes L ON Upload.upload_id = L.like_target
AND L.like_type = 0
LEFT JOIN reposts R ON Upload.upload_id = R.track_id
LEFT JOIN comments C ON Upload.upload_id = C.comment_track
GROUP BY
Upload.upload_id
ORDER BY
u_score DESC
LIMIT
15
然而,由于某种原因,当我运行它时,我收到错误:
#1054 - Unknown column 'c_likes' in 'field list'
感谢所有帮助,如果您认为我可以以任何方式改进我的代码,我很高兴听到它:-)
解决方案
我认为您不能在查询本身中使用列别名。别名暴露给调用查询的任何代码,但不在另一个列定义内部。这些列不知道彼此,也不知道彼此的别名。
我认为你必须更换
(c_likes + c_reposts) / 2) + (0.05 * c_comments)
和
(COUNT(L.like_id) + COUNT(R.repost_id) / 2) + (0.05 * COUNT(C.comment_id))
推荐阅读
- fortran - 错误:在 Fortran 中调用函数时出现无法分类的语句
- python - Python 线程多次调用该方法
- mysql - SQL - 使用随机 IP 地址更新所有行的列
- java - java.sql.SQLException:不正确的整数值:第 1 行的列“IdentCat”的“Guitare”
- css - Bootstrap:强制单元格高度延伸到剩余的屏幕上
- python - TensorFlow 卷积自动编码器
- android - 使用 RxJava2 在 android 模拟器和 JVM 上的不同行为
- python - 如何使用 Python 将文本添加到多个图像
- symfony - 如何强制 symfony 的 phpunit 桥使用 phpunit 6.5 而不是 5.7?
- java - Java 估计 Double 的表示错误