我需要訂購記錄並將「熱」(提升)的記錄放在最上面。如果它的hot_expires_at
列不爲空並且將來記錄是「熱」。目前,我有這個簡單的解決方案:什麼是根據當前時間訂購條件的正確方法?
ORDER BY
IF(hot_expires_at IS NOT NULL AND hot_expires_at > NOW(),
hot_expires_at, from_unixtime(0)) DESC,
created_at DESC
然而這需要一個文件排序,現在我有記錄的幾十萬已經得到了令人難以置信的慢隨着時間的推移。 (如果有幫助,只有一小部分是「熱」)。
我知道我可以運行一個額外的工作,每隔幾分鐘計算一次rank
字段 - 這將足夠接近實時。但是這似乎是一個蠻力解決方案。我也可以將查詢分成兩個(「熱」和「不」),並添加結合了結果的外部邏輯,但這也是非常粗糙且容易出錯的。
我正在尋找正確的方法來做到這一點在MySQL和MySQL的設施。
創建一個計算字段(即Hot),其值爲1或0(Hot或Not)。然後你可以'訂購熱DESC,CreatedAt DESC' – user5151179