我有一個這樣的數據庫:MYSQL ORDER BY CASE問題
-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 9:30 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:35 |
-------------------------------------------------------------------
| 27 | 35 | 9:34 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:33 |
-------------------------------------------------------------------
我需要把所有4行
ORDER BY 'timestamp_one' if 'id_one'=27 or
ORDER BY 'timestamp_two' if 'id_one'=27
這是發言。我現在有:
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
這個效果很好,就是輸出這個:
-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 9:30 | NULL |
-------------------------------------------------------------------
| 27 | 35 | 9:34 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:33 |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:35 |
-------------------------------------------------------------------
但我需要兩個時間戳列訂購好像他們是一個,因此會爲了這樣的:
-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 9:30 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:33 |
-------------------------------------------------------------------
| 27 | 35 | 9:34 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:35 |
-------------------------------------------------------------------
我希望這是有道理的。基本上,我想有兩個特定於WHERE條件的ORDER BY列。然後,一旦爲該行選擇了正確的ORDER BY列,它就會將整個時間戳的ROWS排序。
您是不是要找 「ORDER BY如果 'id_two'= 27 'timestamp_two'」? – buru 2010-12-03 15:09:23
如果一個時間戳或另一個時間戳總是`NULL`,那麼執行`ORDER BY IFNULL(timestamp_one,timestamp_two)`可能會更清晰。 – dkarp 2015-04-28 17:11:42