2010-12-11 12 views
8

Tôi có một bảng có 2 trường DATE và IMPORTANCE. Bây giờ tôi muốn sắp xếp cả hai trường này trong DESCENDING ORDER để các hàng được sắp xếp theo IMPORTANCE cho MACHI NGÀY. Ví dụ, nếu sắp xếp đúng, hàng phải trả lại như thế này:Sắp xếp nhiều trường trong MySQL

Dec 3, 2010 - 10 
Dec 3, 2010 - 10 
Dec 3, 2010 - 8 
Dec 3, 2010 - 7 
Dec 3, 2010 - 3 
Dec 3, 2010 - 1 

Dec 2, 2010 - 10 
Dec 2, 2010 - 9 
Dec 2, 2010 - 3 

Dec 1, 2010 - 8 
Dec 1, 2010 - 5 
Dec 1, 2010 - 5 
Dec 1, 2010 - 4 

Có một hiệu quả cách để đạt được điều này với chỉ có một tuyên bố truy vấn?

Trả lời

25
SELECT * FROM yourtable 
ORDER BY `DATE` DESC, `IMPORTANCE` DESC 
+5

@Frank, DATE là một từ khóa, và trong một số trường hợp, nếu bạn đặt tên cho một cột với các từ đặc biệt, truy vấn của bạn có thể có sai sót. '\' 'thoát nó. –

+3

Không, DATE không phải là một từ khóa và 'không phải là một phần của các tiêu chuẩn SQL ANSI. Sử dụng dấu ngoặc kép "để thoát khỏi tên đối tượng, MySQL cũng biết về dấu ngoặc kép, nó được gọi là ANSI_QUOTES. Kiểm tra http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html và http: // dev. mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_ansi_quotes –

+1

ANSI_QUOTES không phải là hành vi tiêu chuẩn của Mysql và cho phép nó thay đổi cú pháp cần thiết để phân định các chuỗi ký tự, do đó rất có khả năng phá vỡ nhiều phần mềm được phát triển cho Mysql – tacone

5

Thực tế bạn chỉ cần thêm nhiều trường vào ORDER BY tùy thích.

Điều đó muốn được một cái gì đó như:

SELECT * FROM table ORDER BY date DESC, importance DESC