我有两个表 - 一个有论坛主题,另一个用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行
为什么这不起作用,还是有更简单的方法来实现这个目标?
答案 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