Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zaawansowane sortowanie wyników zapytania do bazy
filout
post 1.06.2012, 04:41:24
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 1.06.2012

Ostrzeżenie: (0%)
-----


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?

Ten post edytował filout 1.06.2012, 04:44:18
Go to the top of the page
+Quote Post
IProSoft
post 1.06.2012, 09:40:11
Post #2





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

Ostrzeżenie: (0%)
-----


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`) )


Ten post edytował IProSoft 1.06.2012, 09:40:54


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
irmidjusz
post 1.06.2012, 09:53:21
Post #3





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
--filout--
post 1.06.2012, 13:59:15
Post #4





Goście







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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 3.05.2025 - 08:49