![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 9 Dołączył: 16.02.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Mam tabelę z polem VARCHAR która zawiera rekordy:
50 50A 50B 60 80 100 100A 110 Gdy zrobię SORT BY pole to otrzymuję: 100 100A 110 50 50A 50B itd Czy da się posortować to w sposób "naturalny" dla człowieka, czyli od najmniejszego do największego? W tablicach jest coś takiego, nazywa się natsort. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 9 Dołączył: 16.02.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ach, faktycznie jest, a nie mogłem znaleźć.
Dzięki, działa, czyli trzeba zrobić: select * from tabela order by cast(pole AS UNSIGNED) No i po jakimś czasie wracam do problemu i okazuje się że nie zawsze dobrze działa to rozwiązanie. Mianowicie przy takich wartościach: ZR 1 ZR 2 ZR 3A ZR 3B ZR 5 ZR 10A ZR 10B ZR 10C ZR 11 ZR 12 ZR 13 (podaję w takiej kolejności w jakiej powinny się wyświetlać) Podany powyżej sposób czyli ORDER BY CAST(nazwa_pola AS UNSIGNED) zwraca: ZR 1 ZR 10A ZR 10B ZR 10C ZR 11 ZR 12 ZR 13 ZR 2 ZR 3A ZR 3B ZR 5 Tak samo NIE działa inne rozwiązanie: ORDER BY ORD(LPAD(`nazwa_pola`, 10, '0' )) Podobnie rozwiązanie podane tutaj: codewalkers.com |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
no bo Twoje wartości na początku mają ZR. Nie mozesz tekstu zrzutowac na liczbe bo da ci 0.
Musisz zaczac rzutowanie od momentu gdy zaczynają się liczby |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 9 Dołączył: 16.02.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za wskazówkę, po kilku próbach doszedłem do czegoś co w końcu działa
Ale niestety, nie jest to uniwersalny kod na wszystkie przypadki. Szkoda że nie zrobili w MySQL takiej funkcji jak natsort bo często jest potrzebna, a chyba nie da się użyć jakieś uniwersalnej prostej metody. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 02:23 |