Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Sortowanie pola textowego jak numeru
Forum PHP.pl > Forum > Przedszkole
fredman
mam pole textowe "numer" w tabeli, które zawiera takie coś 5566/12 . Poe nie może być INT bo potrzebuję tego slasha tam. Teraz jeśli przy pobieraniu wyników dam ORDR BY to sortuje się to oczywiście jak tekst czyli mam kolejność typu:

5566/12
5566/128
5566/3

dało wy się coś zrobić żeby to się sortowało jak liczby? Szczególnie chodzi o ten numer po slashu bo początek 5566/ ustawiam sobie wcześniej i w samym ORDER BY już jest nieistotny.
wookieb
  1. SELECT *, CAST(SUBSTRING_INDEX(pole, '/', 1) AS SIGNED INTEGER) AS p1, CAST(SUBSTRING_INDEX(pole, '/', -1) AS SIGNED INTEGER) AS p2 FROM tabela ORDER BY p1, p2

Pisane z palca wiec musisz pokombinowac
CAST zmienia typ wartości
fredman
kurde znalazlem na forum jeszcze ejdne temat i mi nie sortuje, dalej traktuje to jako tekst anie int :/

teraz wyglada to tak:

  1. <?php
  2. $wynik=mysql_query("SELECT  numer FROM tabela  ORDER BY CAST(SUBSTRING_INDEX(numer, '/', -1) as SIGNED INTEGER) DESC");
  3. ?>


może porostu posortuje jakoś tabele z wynikiem ?
wookieb
Jak nie działa jak działa.
Pokaż jakie masz dane.
fredman
mam 3 rekordy z polem NUMER typu text

0905/12
0905/128
0905/44


no i jak dam DESC to są tak jak powyzej a jak dam ASC to jest:

0905/44
0905/128
0905/12
wookieb
No u mnie jest ok
0905/128
0905/44
0905/12

Podaj strukturę tabeli (zapytanie) oraz wersję mysql.
fredman
Wersja klienta MySQL: 5.0.33


  1. CREATE TABLE `produkty` (
  2. `id_p` int(11) NOT NULL AUTO_INCREMENT,
  3. `grupa` int(11) NOT NULL,
  4. `kategoria` int(11) NOT NULL,
  5. `nazwa_p` text NOT NULL,
  6. `numer` text NOT NULL,
  7. `cena_p2` int(20) DEFAULT NULL,
  8. `cena_p3` int(20) DEFAULT NULL,
  9. `obrazek_p1` varchar(255) NOT NULL,
  10. `obrazek_p2` varchar(255) DEFAULT NULL,
  11. `obrazek_p3` varchar(255) DEFAULT NULL,
  12. PRIMARY KEY (`id_p`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=ucs2 AUTO_INCREMENT=40 ;


i wyświetlam tak:

  1. <?php
  2. while ( $row= mysql_fetch_array($wynik) ) {
  3. echo  " $row[numer]";
  4. echo "<br />";
  5. }
  6. ?>
wookieb
Wyda ci się to dziwne (dla mnie też jest tongue.gif), ale problem rozwiąże zmiana kodowania. Ja ustawiłem na utf8_general_ci i działa smile.gif
Pamiętaj o zmianie kodowanie dla tabeli a także dla pól tekstowych.
fredman
jessssss, teraz działa! dzięki za zaaangażowanie w moj problem no i rozwiązanie go winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.