簡體   English   中英

ORDER BY / CASE組合導致MySQL查詢無法正常工作

[英]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";

可以確定ENDDESC之間的逗號不正確。 如果您擔心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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM