![]() |
![]() ![]() |
![]() |
![]() ![]()
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ść ![]() 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 ![]() 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: niby działa, ale nie interesuje mnie 10k zapytań do bazy ![]() spróbowałem, więc wyrażeń regularnych zaczynając od sortowania wg. schematu i tu poległem ![]() 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ć
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 |
|
|
![]()
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.
|
|
|
![]()
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.
![]() ![]() Wiem, że nie ładne rozwiązanie z powodu redundancji danych, ale może mieć znaczenie wydajnościowe? Tak sobie gdybam. |
|
|
--filout-- |
![]()
Post
#4
|
Goście ![]() |
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 ![]() No i pomyśleć, że rozwiazanie było tak blisko ![]() Dzieki |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 3.05.2025 - 08:49 |