Sortowanie danych w MySQL i Django
7 January 2010
Comments
Każda baza danych ma swoje specyficzne funkcjonalności, które dość często mogą okazać się przydatne. Zdarza się że liczby przechowujemy w polach tekstowych (VARCHAR) jako pole models.CharField. Sortowanie tego pola nie pozwoli na poprawne sortowanie liczb. Np efekt będzie taki.
1 10 100 101 102 103 104 105 106 107 108 109 11
ORDER BY kolumna
Należy zastosować:
ORDER BY (kolumna+0)
W Django zwykłe sortowanie to nie problem:
data = Row.objects.all().order_by('cell3')
for i in data:
print i.cell3
data = Row.objects.all()
data = data.extra(select={'sortuj_numerycznie': '(cell3+0)'})
data = data.extra(order_by=['sortuj_numerycznie'])
for i in data:
print i.cell3
Innym problemem jaki może się pojawić to błędne sortowanie polskich liter w sortowaniu napisowym. W przypadku MySQL oznacza to brak ustawionego polskiego zestawu znaków:
ALTER TABLE tabela CONVERT TO CHARACTER SET UTF8 COLLATE utf8_polish_ci;
RkBlog
Comment article