[英]ORDER BY / CASE Combination Causing MySQL Query to Not Work
下面的查詢返回空白頁。 這是由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";
可以確定END
和DESC
之間的逗號不正確。 如果您擔心ORDER BY
將語法弄混了,則可以嘗試將整個CASE
表達式包裝在括號中。
我會把這個大的令人困惑的表達式放到選擇列表中,然后對它進行排序? 您絕對不能更改選擇列表嗎?
您希望在“ 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
或者,為了更好地理解它,您可以將其包圍在括號中...
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'關鍵字放在要按降序順序排列的后面。(不需要逗號)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.