Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zaawansowane sortowanie wyników zapytania do bazy
Forum PHP.pl > Forum > Przedszkole
filout
Witam wszystkich

To mój pierwszy post na tym forum, więc proszę o wyrozumiałość wink.gif

Zacznę od początku:

Chcę posortować wyniki zapytania do bazy i tu zaczynają sie schody:
Nie interesuje mnie sortowanie alfabetyczne bo to jest pikuś.
Chciałbym sortować wyniki zapytania według części wartości kolumny wyciągniętej z bazy.
Konkretnie (zeby bylo jasne o co mi chodzi):
interesują mnie 3 kolumny: ikona, tytul i podpis
problem twki w posortowaniu wyników wedlug części tytułu, który ma format: abc [cztery cyfry 0-9] xyz (oczywiście "abc" i "xyz" to tylko przykłady wink.gif )
skrypt ma w pierwszej kolejnośći wyciągnąć zawartość nawiasu klamrowego, a następnie posortować: a. według wartości liczbowej w nawiasie b. alfabetycznie

Próbowałem z bazą danych:
  1. $th0000 = mysql_query("SELECT * FROM temat WHERE tytul LIKE '%[0000]%' ORDER BY tytul ASC");
  2. $th0001 = mysql_query("SELECT * FROM temat WHERE tytul LIKE '%[0001]%' ORDER BY tytul ASC");

niby działa, ale nie interesuje mnie 10k zapytań do bazy wink.gif

spróbowałem, więc wyrażeń regularnych zaczynając od sortowania wg. schematu
i tu poległem sad.gif
Wiem, że coś robię żle, ale sam jeszcze nie wiem co...

kiedy patrzę na ten kod wiem, że coś pominąłem, ale nie wiem jak się do tego zabrać

  1. $th = mysql_query("SELECT * FROM temat");
  2. $tem = mysql_fetch_array($th);
  3. $wzor = '/\\[[0-9]{4}\\]/';
  4.  
  5. while (preg_match($wzor, $temat['tytul']))
  6. {
  7. echo $tem['ikona'], "Tytuł: " $tem['tytul'], " napisał: ", $tem['podpis'], "</br>";
  8. }


pętla while w nieskończoność wywala mi pierwszy napotkany wynik
zastąpienie while instrukcją if daje mi tylko pierwszy wynik z bazy
"taka jest charakterystyka tych instrukcji" - to wiem

w takim razie co mogę zrobić żeby wyświetlało mi wszystkie wyniki zapytania odpowiadające łańcuchowi
mogę się tylko domyślać, że chodzi o nieodpowiednie umiejscowienie pętli w kodzie

jakieś propozycje lub sugestie?
IProSoft
Jeżeli ciąg ma taką formę jak piszesz czyli 3litery - 4cyfry -3 litery możesz zastosować coś na wzór:
Kod
SELECT title, SUBSTRING( `title` , 1, 2 ) AS warunek1, SUBSTRING( `title` , 2, 3 ) AS warunek2
FROM tabela
ORDER BY warunek1, warunek2;


Jeśli nie znasz pozycji możesz dodać:
Kod
LOCATE('[', `title`);

np
Kod
SUBSTRING( `title` , LOCATE('[', `title`), LOCATE(']', `title`) )
irmidjusz
Jeszcze możesz dodać nową kolumnę, w której będziesz trzymał tylko tą część wewnętrzną [0000] - i wtedy sortujesz po dwóch kolumnach: title_symbol, title. tongue.gif wink.gif

Wiem, że nie ładne rozwiązanie z powodu redundancji danych, ale może mieć znaczenie wydajnościowe? Tak sobie gdybam.
-filout-
Cytat(IProSoft @ 1.06.2012, 09:40:11 ) *
Jeżeli ciąg ma taką formę jak piszesz czyli 3litery - 4cyfry -3 litery możesz zastosować coś na wzór:
Kod
SELECT title, SUBSTRING( `title` , 1, 2 ) AS warunek1, SUBSTRING( `title` , 2, 3 ) AS warunek2
FROM tabela
ORDER BY warunek1, warunek2;


Jeśli nie znasz pozycji możesz dodać:
Kod
LOCATE('[', `title`);

np
Kod
SUBSTRING( `title` , LOCATE('[', `title`), LOCATE(']', `title`) )


W to mi graj biggrin.gif
No i pomyśleć, że rozwiazanie było tak blisko wink.gif

Dzieki
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.