2010-06-28 7 views

cevap

76

Aşağıdaki deneyebilirsiniz:

SELECT * FROM your_table ORDER BY your_field = 0, your_field; 

Testi durumda:

CREATE TABLE list (a int); 

INSERT INTO list VALUES (0); 
INSERT INTO list VALUES (0); 
INSERT INTO list VALUES (0); 
INSERT INTO list VALUES (1); 
INSERT INTO list VALUES (2); 
INSERT INTO list VALUES (3); 
INSERT INTO list VALUES (4); 
INSERT INTO list VALUES (5); 

Sonucu:

SELECT * FROM list ORDER BY a = 0, a; 

+------+ 
| a | 
+------+ 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 0 | 
| 0 | 
| 0 | 
+------+ 
8 rows in set (0.00 sec) 
+2

Mükemmel, çok basit! –

+3

Herhangi bir boole durumu ORDER BY? – SRKX

+2

@JSmaga: Herhangi bir ifadeyi kullanabilirsiniz. "ORDER BY" [sözdizimi] 'ne bakın (http://dev.mysql.com/doc/refman/5.1/en/select.html): '[ORDER BY {col_name | expr | position} ' –

0

aşağıdaki sorgu işi görecektir.

(SELECT * FROM table WHERE num!=0 ORDER BY num) UNION (SELECT * FROM table WHERE num=0) 
1

Aşağıdaki yapabilirsiniz:

SELECT value, IF (value = 0, NULL, value) as sort_order 
FROM table 
ORDER BY sort_order DESC 

Boş değerler listesinin aşağı olacaktır.

İlgili konular