2009-12-01 9 views
5

wydaje się typowym pytaniem, ale jest inaczej.Kolejność MySQL według wielu kolumn w połączeniu (nie zamówienie przez pole 1 asc, pole2 asc)

Mam tabelę z identyfikatorem i 3 polami czasowymi (po prostu). Początkowo wszystkie 3 pola mają wartość zerową i są wypełniane wartościami. Przykłady wierszy to:

id time1  time2  time3 
1 1259625661 1259643563 null 
2 null  1259621231 null 
3 1259625889 null  1259644511 
4 null  1259621231 null 
5 null  null  1259644511 
6 null  1259621231 null 
7 1259625889 null  null 

Co potrzebne jest, aby uzyskać listę identyfikator użytkownika klasyfikowane według najnowszego znacznika czasu (pomijając czy to w time1, Time2 lub time3). Doing zamówienie time1 desc, TIME2 desc, time3 desc daje mi źle listy, jak najpierw sortuje wszystkich polu time1, potem drugi, itp ...

Oczekiwany wynik jest lista identyfikatorów.

Można to zrobić w MySQL w jednym zapytaniu? Dzięki

Odpowiedz

12
SELECT * 
FROM mytable 
ORDER BY 
     GREATEST(
     COALESCE(time1, 0), 
     COALESCE(time2, 0), 
     COALESCE(time3, 0) 
     ) DESC 
+1

Uwaga dotycząca wersji na http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest może być przydatna dla użytkownika, który zadaje pytanie. – jensgram

+0

'@ jensgram': ładny punkt. Dodałem 'COALESCE', aby obsłużyć wszystkie przypadki. – Quassnoi

Powiązane problemy