2009-12-01 12 views
5

Tipik bir soru gibi görünüyor ama farklı.MySQL Birden çok sütun birleştirilerek sipariş ver (field1 asc, field2 asc'ye göre değil)

Kimlik ve 3 zaman damgası alanlı bir tablo var (basitçe). Başlangıçta 3 alanın tümü boş ve değerler ile doluyorlar. satır örnekleri şunlardır:

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 

Benim ihtiyacım id en (o zm1, TIME2 veya süresi3 yer alıyorsa görmezden) En son zaman damgası göre sınıflandırılmaktadır bir listesini elde etmektir. time1 azalan, time2 desc, süresi3 desc tarafından siparişi yapmak ilk sıralar tüm ardından time1 alanında, ikinci, vb ... olarak

Beklenen sonuç kimliği yılların listesidir Bana bir hata listesini verir.

Bu, MySQL'de tek bir sorguda yapılabilir mi? http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest de teşekkürler

cevap

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

versiyon notu soran kullanıcı için yararlı olabilir. – jensgram

+0

'jensgram': güzel nokta. Tüm vakaları ele almak için COALESCE'yi ekledim. – Quassnoi