MySQL ORDER BY CASE 排序問題
在 MySQL 中,ORDER BY 子句可讓您依照指定列對查詢結果進行排序。但是,在對取決於特定條件的多個欄位進行排序時,您可能會遇到困難。
考慮以下場景:
您有一個包含兩列的表格:timestamp_one 和 timestamp_two。您需要檢索 id_one 或 id_two 等於 27 的所有行。此外,您希望根據 id_one 或 id_two 是否為 27,根據 timestamp_one 或 timestamp_two 對結果進行排序。
雖然以下查詢正確檢索所需的行:
SELECT * FROM tablename WHERE id_one=27 OR id_two=27 ORDER BY CASE WHEN id_one=27 THEN timestamp_one END DESC, CASE WHEN id_two=27 THEN timestamp_two END DESC
它按每一列單獨對行進行排序,而不是將它們組合成單個時間戳進行排序。
要解決此問題,您可以使用以下方法修改後的查詢:
SELECT id_one, id_two, timestamp_one, timestamp_two FROM tablename WHERE id_one = 27 OR id_two = 27 ORDER BY CASE WHEN id_one=27 THEN timestamp_one WHEN id_two=27 THEN timestamp_two END DESC
在此修改後的查詢中,我們透過使用單一CASE 表達式來確定排序順序來簡化ORDER BY 子句。這允許我們根據組合時間戳對行進行排序,該組合時間戳會根據 id_one 和 id_two 的值動態選擇適當的列(timestamp_one 或 timestamp_two)。
以上是如何在 MySQL 中依照條件時間戳記對行進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!