SQL Order By - 条件不起作用

时间:2015-10-16 09:56:35

标签: php mysql

概述

我有两个表 - 一个有论坛主题,另一个用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 - 您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以便在DESC附近使用正确的语法,t .timestamp`END DESC LIMIT 0,30'在第9行

为什么这不起作用,还是有更简单的方法来实现这个目标?

1 个答案:

答案 0 :(得分:2)

您应该将<xs:complexType name="ConditionType"> <xs:simpleContent> <xs:extension base="string"> <xs:attribute name="type" type="xs:string" use="required"/> </extension> </xs:simpleContent> </xs:complexType> 放在case语句的末尾,如:

SORT TYPE