簡體   English   中英

mysql - ORDER BY 語句中的 IF…ELSE 或 CASE

[英]mysql - IF…ELSE or CASE in ORDER BY statement

在下面的查詢中,我沒有得到想要的結果。 我希望根據兩個不同表的兩個不同日期字段根據最新事件發生對結果進行排序。 讓我們先看看查詢。

SELECT R1.swp_to, R1.swp_type, R1.swp_date, M.mem_fname, M.mem_lname, M.mem_last_activity, DP.dp_photo, GREATEST(R1.swp_date, R2.swp_date) FROM swipes AS R1
LEFT JOIN swipes AS R2 ON(R1.swp_to = R2.swp_by AND R2.swp_to = R1.swp_by AND R2.swp_type <> 'left')
LEFT JOIN members AS M ON(R1.swp_to = M.mem_id)
LEFT JOIN display_photos AS DP ON(R1.swp_to = DP.dp_mem AND DP.dp_index = 1)
LEFT JOIN messages as MSG ON ((R1.swp_to = MSG.msg_from OR R1.swp_to = MSG.msg_to) AND (R1.swp_by = MSG.msg_from OR R1.swp_by = MSG.msg_to))
WHERE R1.swp_by = :mem AND R2.swp_by IS NOT NULL AND R1.swp_type <> 'left'
ORDER BY IF(MSG.msg_time IS NULL, 0, 1), R1.swp_date

ORDER BY語句中,我們可以看到有兩個 TIME 字段msg_timeswp_date 每當有新匹配時swp_date更新,並且當有新消息時msg_time更新。 使用此查詢獲取的記錄必須按照最近發生的事件進行排序(以兩者中最早的日期為准)。 我當前的ORDER BY語句不滿足要求。 我在這里想念什么?

您可以使用 function GREATEST()

ORDER BY GREATEST(COALESCE(MSG.msg_time, R1.swp_date), R1.swp_date) DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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