sql

2010-02-07 12 views
6

ile değer 0 dışında yeniden sıralama tamsayı Ben bir tamsayı değeri 'yer' dayalı MYSQL veritabanı tablonun sıralı bir satır listesi elde etmeye çalışıyorum.sql

SELECT * FROM mytable 
ORDER BY place; 

Bu değer yerine = 0 ile tüm satırları tablonun sonunda görünmelidir dışında tamam çalışır.

Yani benim masa ise:

name place 
---- ----- 
John 1 
Do 2 
Eric 0 
Pete 2 

o haline gelmelidir:

name place 
---- ----- 
John 1 
Do 2 
Pete 2 
Eric 0 

cevap

4
SELECT * 
FROM myTable 
ORDER BY place>0 DESC, place 

önce VAKA inşaat görmedim CASE

+0

Bu çözümü küçük ve hoş görünüyor. Daha az verimli olmadıkça bunu kabul ediyorum. – Roalt

+0

veya sadece "ORDER BY place = 0, yer" – ysth

6
order by case when place = 0 then 1 else 0 end asc, place asc 

tüm olmayan sıfır ilk sipariş almak bu şekilde.

+0

olmadan çözümdür (ama sonra, erken benim SQL sınıfları var:

Alternatif biz iki değerlere göre sıralayabilir doksanlı). Kolaylık nedeniyle @ Yumuşak Yumuşak olanı tercih ederim. – Roalt

2
SELECT * 
FROM myTable 
ORDER BY CASE place WHEN 0 THEN 9999 ELSE place END 

Bu yaklaşım biz 9999 (veya başka bir değer) yer sütundaki tüm olası değerleri daha büyük olduğu bilinmektedir anlamına gelir.

ORDER BY CASE place WHEN 0 THEN 0 ELSE -1 END, place 
+0

Teşekkürler, 9999 numaraları, kendim hakkında düşündüğüm bir şeydi, sadece siparişin değerlendirilmiş sıralama ölçütlerini değiştirebileceğini bilmiyordum. Yinelenen bir sipariş listesinin yüksek bir performans cezası varsa, bu benim ilk seçimim olacaktır. – Roalt