概述
我有两个表 - 一个包含论坛主题,另一个包含用户按 ID 对每个主题进行的投票(值为 1 或 -1)。
我有一个算法,适用于所有 14 天以内的帖子,还有一个 SQL 查询来检索所有帖子的投票总数 vote
、算法得分总 score
、他们的 ID id
以及发布的时间戳。
查询
SELECT t.`id`,
SUM(v.`vote`) AS vote,
(((100 - ( (UNIX_TIMESTAMP(NOW()) - t.`timestamp`) / (14*60*60*24) * 100)) * (SUM(v.`vote`) + 10)) + SUM(v.`vote`)) AS score
FROM `community_topics` t
LEFT JOIN `community_votes` v
ON v.`topic_id` = t.`id`
GROUP BY t.`id`
ORDER BY CASE
WHEN t.`timestamp` >= UNIX_TIMESTAMP(DATE_SUB(NOW(),INTERVAL 14 DAY))
THEN score DESC
ELSE vote DESC, t.`timestamp` DESC
END
问题
但是,最后一行不起作用:
ORDER BY CASE
WHEN t.`timestamp` >= UNIX_TIMESTAMP(DATE_SUB(NOW(),INTERVAL 14 DAY))
THEN score DESC
ELSE vote DESC, t.`timestamp` DESC
END
这应该按算法分数对 14 天以内的帖子进行排序,按投票分数和时间戳对 14 天以上的帖子进行排序。
我看到的错误是:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC, t.`timestamp` END DESC LIMIT 0, 30' at line 9
为什么这不起作用,或者是否有更简单的方法来实现此目的?
最佳答案
您应该将SORT TYPE
放在case语句的末尾,例如:
ORDER BY CASE
WHEN t.`timestamp` >= UNIX_TIMESTAMP(DATE_SUB(NOW(),INTERVAL 14 DAY))
THEN score
ELSE vote
END DESC,
t.`timestamp` DESC
关于php - SQL Order By - 条件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33167560/