2009-12-01 36 views
5

nó có vẻ giống như một câu hỏi điển hình nhưng khác biệt.Đặt hàng MySQL theo nhiều cột được kết hợp (không phải theo trường 1 asc, field2 asc)

Tôi có một bảng có id và 3 trường dấu thời gian (chỉ đơn giản). Ban đầu tất cả 3 trường là null, và chúng được làm đầy với các giá trị. Ví dụ về các hàng là:

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 

Những gì tôi cần là để có được một danh sách các id của sắp xếp theo dấu thời gian gần đây nhất (bỏ qua nếu nó trong time1, time2 hoặc time3). Làm một trật tự bởi desc time1, time2 desc, time3 desc mang lại cho tôi một danh sách sai, vì nó loại đầu tiên tất cả các lĩnh vực time1, sau đó thứ hai, vv ...

Kết quả mong đợi là một danh sách các id.

Điều đó có thể được thực hiện trong MySQL trong một truy vấn? Cảm ơn

Trả lời

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

Ghi chú phiên bản tại http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest có thể hữu ích cho người dùng hỏi. – jensgram

+0

'@ jensgram': điểm đẹp. Tôi đã thêm 'COALESCE' để xử lý tất cả các trường hợp. – Quassnoi

Các vấn đề liên quan