2011-10-11 32 views
8

Tôi có một câu hỏi tôi gặp phải một đoạn mã thú vị. Trong tuyên bố của MySQL có cái gì đó như:ORDER BY và = (bằng) trong MYSQL

{...} ORDER BY bất cứ điều gì = 3 ASC, bất cứ điều gì = 4 ASC, bất cứ điều gì = 6 ASC {...}

Điều đó có nghĩa rằng nó sẽ đặt hàng theo cách này ?:

thing | whatever 
15 | 1 
1  | 3 
5  | 3 
8  | 3 
2  | 4 
3  | 4 
6  | 4 
4  | 6 
7  | 6 
9  | 6 
14 | 9 
21 | 10 
18 | 9 
... 

nó dường như được sắp xếp chỉ có bất cứ điều gì mà tương đương với 3,4 và 6 phần còn lại là không có thứ tự ...

đây có phải là một hợp/cú pháp hỗ trợ?

Trả lời

7

whatever=3 đánh giá là boolean với 0 là sai và 1true.

Bởi vì nó được đặt hàng tăng dần những cái không đáp ứng điều kiện sẽ được đặt trước. Sau đó, cột thứ tự thứ hai whatever=4 có hiệu lực, do đó, những nơi mà whatever=4 sẽ là cuối cùng trong nhóm đó và cứ tiếp tục như vậy.

Đối với những nơi whatever không nằm trong số (3,4,6), không có đơn đặt hàng nào được chỉ định để hoạt động như một bộ ngắt và đặt hàng tùy ý.

Nó được hỗ trợ cú pháp trong MySQL nhưng không được chuẩn hoặc di động.

+0

'Bởi vì nó được ra lệnh tăng dần những người không đáp ứng điều kiện sẽ được đặt hàng first'? Vui lòng giải thích lý do tại sao trước tiên? Bằng cách đặt hàng đầu tiên bạn có nghĩa là xuất hiện ở đầu trang? –

+1

@GhazanfarMir Vì nếu bạn sắp xếp các giá trị '0' và' 1' tăng dần. '0' đến trước (vâng, ở trên cùng). –

+0

@downvoter - Một số vấn đề với câu trả lời này? Vui lòng giải thích! –

1

Trên thực tế nó ra lệnh bởi kết quả của so sánh, đó là giá trị boolean là 0 hoặc 1. Các mã kết quả là một cái gì đó tương tự (pseudo-code):

ORDER BY 
    CASE whatever = 3 THEN 1 ELSE 0 
    ASC, 
    CASE whatever = 4 THEN 1 ELSE 0 
    ASC 

Mà cuối cùng nói đến (nếu giá trị nằm trong danh sách),

ORDER BY 0,0,1 
ORDER BY 0,1,0 

và nếu giá trị không có trong danh sách:

ORDER BY 0,0,0 

Vì vậy, giá trị s không có trong danh sách được coi là có cùng giá trị và không được đặt hàng, và các giá trị trong danh sách được sắp xếp dựa trên vị trí trong danh sách.

Bạn có thể thay thế này với ORDER BY FIELD(whatever, 3,4,6) (documentation)