Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie po liczbach w polu tekstowym
Forum PHP.pl > Forum > Bazy danych > MySQL
damianos
Witam ponownie! W polu(varchar) o nazwie "pozycja" mam rekordy o następujących nazwach.

Kod
pozycja. 1. Tytul
pozycja. 3. Tytul
pozycja. 13. Tytul
pozycja. 25. Tytul


Mam w związku z tym dwa pytania:
-jak powinno wyglądać zapytanie, które zwróci rekordy z pola "pozycja" posortowane po numerach występujących w ich nazwach,
-czy można to osiągnąć "doklejając" do już gotowego zapytania odpowiednio spreparowana klauzulę ORDER BY?
sf
A próbowałeś wyciągnać wyrażeniem regularnym te liczby w klauzli ORDER BY? snitch.gif
damianos
gdybym wiedział jak użyć wyrażeń regularnych w stylu: ORDER BY 'wyrażenie regularne' , to zapewne bym spróbował. Jak się to robi?
prond
Moim zdaniem jeżeli chcesz sortować dane z tej tabeli na podstawie pewnego podstringu to powinieneś "wyrzucić" go do osobnej kolumny.

W ten sposób nie będzie już tak drastycznie złamana pierwsza postać normalna, zapytania będą na 100% szybsze.

Proponuje Ci dodać nową kolumnę, a w PHPie zrobić w pętli update tej tabli korzystając z prostego wyrażenia regularnego :

  1. <?php
  2. $intPosition = (int)preg_replace("/[^0-9]/", '', $row['pozycja']);
  3. ?>
php programmer
A co zwykłe ORDER BY nie wystarczy?
Przecież nie ma ograniczenia jedynie do sortowania kolumn liczbowych.
Kicok
ale ORDER BY sortuje dane tekstowe alfabetycznie, np:

Kod
1
2
20
24
3
5
53
533
534
6
7
damianos
@kicok: dokładnie tak! A ze względu na ograniczenia innego typu nie jestem w stanie ingerować w kod całego zapytania. Jedyne co mogę, to doleić na końcu "ORDER BY"
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.