Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Zaawansowane sortowanie wyników zapytania do bazy
filout
post
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ść (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/wink.gif)

spróbowałem, więc wyrażeń regularnych zaczynając od sortowania wg. schematu
i tu poległem (IMG:style_emoticons/default/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
 
Start new topic
Odpowiedzi
IProSoft
post
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
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 22.08.2025 - 19:13