以下查询返回空白页面。它是由ORDER BY和CASE组合引起的,因为查询的其余部分可以很好地处理不那么复杂的事情。
有没有人在这部分中看到任何明显的错误:
ORDER BY CASE
WHEN s.datesubmitted > DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN s.points
WHEN s.datesubmitted < DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN most_recent
END, DESC
$sqlStr = "SELECT s.loginid, s.title, s.url, s.displayurl, s.points, s.datesubmitted, l.username,
s.submissionid, s.subcheck, s.topten, COUNT(c.commentid) countComments,
GREATEST(s.datesubmitted, COALESCE(MAX(c.datecommented), s.datesubmitted)) AS most_recent
FROM submission s
JOIN login l ON s.loginid = l.loginid
LEFT JOIN comment c ON s.submissionid = c.submissionid
GROUP BY s.submissionid
ORDER BY CASE
WHEN s.datesubmitted > DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN s.points
WHEN s.datesubmitted < DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN most_recent
END, DESC
LIMIT $offset, $rowsperpage";
答案 0 :(得分:4)
非常确定END
和DESC
之间的逗号不正确。如果您担心CASE
语法混乱,您可以尝试将整个ORDER BY
表达式括在括号中。
我会把这个大而混乱的表达式放在选择列表中,然后才对它进行排序?您是否有理由无法更改选择列表?
答案 1 :(得分:2)
在“案例”陈述之后,你想要它没有逗号:
ORDER BY CASE
WHEN s.datesubmitted > DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN s.points
WHEN s.datesubmitted < DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN most_recent
END DESC
或者,为了更好地理解它,你可以用parens包围它......
ORDER BY (CASE
WHEN s.datesubmitted > DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN s.points
WHEN s.datesubmitted < DATE_SUB(NOW(), INTERVAL 1 HOUR) THEN most_recent
END) DESC
...所以它就像一个列,然后在指定您想要按降序排序之后放置'DESC'关键字..(不需要逗号)