[英]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_time
和swp_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.