Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] Sortowanie z pustymi rekordami
The Night Shadow
post 4.03.2006, 19:44:44
Post #1





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Czy jeśli komórka w bazie danych jest pusta, a sortje według kolumny, w której się znajduje robi to w następujący spośób:

pusta...
pusta...
a...
b...
c...
itd.?

Mam wrażenie, żę nie.


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
TomASS
post 4.03.2006, 22:59:08
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


A jakie jest dokładnie pytanie?

Sortowanie ASC zadziała tak jak pokazałeś pod warunkiem, że pisząc puste miałeś na myśli Null (pozdrawiam winksmiley.jpg ).

Sortowanie DESC odwróci kolejność sortowania.

Czy to takie trudne sprawdzić samemu? 5 sekund roboty.


--------------------
Go to the top of the page
+Quote Post
The Night Shadow
post 6.03.2006, 12:17:39
Post #3





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


I co? I mam kolumne Gadu:

Cztery rekordy.
Jakiś numer
jakiś numer
Jakiś numer
(pusty)

Kiedy chce sortować nie sortuje (ani w górę, ani w dół)
Kiedy zamiast pustej komórki dodawane jest NULL (przez bazę danych) również sortowanie się sypie... dlaczego?


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
nospor
post 6.03.2006, 12:22:07
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Moze pokaz nam strukture tabeli, dane w niej i zapytanie Twoje.
Ja se zrobilem wlasnie testową tabelę i zapewniam Cię, iż dobrze sortuje. nic się nie sypie. Mam i nulle, mam i puste pola, mam i jakies numery


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
The Night Shadow
post 6.03.2006, 12:48:27
Post #5





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Struktra bazy danych:

id (kluczowe autonumeracja)
login
haslo
kod (potrzebny do potwierdzenia rejestracji)
status (aktywowany lub nie - 1/5)
data (założenia lub aktywacji konta)
ostatnie_logowanie
ostatnie_ip
ostatni_host
email
gadu
tlen
skype
www
imie
pytanie (w razxie przypominania hasła)
odpowiedz
ranga (użytkownik administrator itp)
dataurodzenia_dzien
dataurodzenia_miesiac
dataurodzenia_rok
ostatnia_aktywnosc (na bazie tego bola zrobiłem zabezpieczenie by nie dodawano więcej niż 1 komentarzy itp. w ciągu pół minuty)
kod_email (w razie zmiany maila)
nowy_email (przed autoryzacją nowego maila)
email_status (czy podany wyżej mail jest aktywowany - 1/5)

Najprawdopodobniej problem wynika z zapytania, które podam poniżej. Na stronie z wyświetlaniem listy użytkowników znajduje się pole wyboru z kilkoma opcjami. Ze względów estetycznych nazwy różnią się od pól w bazie danych, a co za tym idzie musiałem napisać skrypt pełen warunków np. (W polu wyboru jest "numeru gadu-gadu", a warunek zmienia to na "gadu" i dalej wstawia do sortowania.

Poniżej pole wyboru:

  1. <form method="post" action="rejestracja.php" id="sortowanie" style="display: inline;">
  2.  
  3. <!-- Poniżej znajduje się lista opcji. Warunki "SELECTED" działają bez problemowo. -->
  4.  
  5. <input type="hidden" name="opcja" value="uzytkownicy" />
  6. <select name="wedlug">
  7. <option <? if ($sortowanewedlug=='loginu') { ?> selected="selected" <? } ?>>loginu</option>
  8. <option <? if ($sortowanewedlug=='adresu e-mail') { ?> selected="selected" <? } ?>>adresu e-mail</option>
  9. <option <? if ($sortowanewedlug=='numeru Gadu-Gadu') { ?> selected="selected" <? } ?>>numeru Gadu-Gadu</option>
  10. <option <? if ($sortowanewedlug=='nicku Tlen') { ?> selected="selected" <? } ?>>nicku Tlen</option>
  11. <option <? if ($sortowanewedlug=='rangi') { ?> selected="selected" <? } ?>>rangi</option>
  12. <option <? if ($sortowanewedlug=='statusu') { ?> selected="selected" <? } ?>>statusu</option>
  13. <option <? if ($sortowanewedlug=='daty założenia/aktywacji konta') { ?> selected="selected" <? } ?>>daty założenia/aktywacji konta</option>
  14. <option <? if ($sortowanewedlug=='daty ostatniego logowania') { ?> selected="selected" <? } ?>>daty ostatniego logowania</option>
  15. <option <? if ($sortowanewedlug=='adresu IP') { ?> selected="selected" <? } ?>>adresu IP</option>
  16. </select>
  17.  
  18. <!-- Poniżej drga opcja zxa pomocą której wybiera się malejące lub rosnące sortowanie -->
  19.  
  20. <select name="jak">
  21. <option <? if ($sortowaniejak=='rosnąco') { ?> selected="selected" <? } ?>>rosnąco</option>
  22. <option <? if ($sortowaniejak=='malejąco') { ?> selected="selected" <? } ?>>malejąco</option>
  23. </select>
  24. <br /><br />- <a href="#" onclick="document.getElementById('sortowanie').submit();">
  25. <b>Przełącz</b>
  26. </a> -<br /><br />
  27. </form>


Poniżej skrypt zamiany wybranej opcji na nazwę kolumny w bazie danych MySQL:

  1. <? // Zamiana kokeljnych wartości pierwszej z opcji na te wstawiane do zapytania.
  2.                             
  3.                             if ($sortowanewedlug=='')
  4.                             {
  5.                                 $sortowanewedlug="login";
  6.                             }
  7.                             if ($sortowanewedlug=='loginu')
  8.                             {
  9.                                 $sortowanewedlug="login";
  10.                             }
  11.                             if ($sortowanewedlug=='adresu e-mail')
  12.                             {
  13.                                 $sortowanewedlug="email";
  14.                             }
  15.                             if ($sortowanewedlug=='numeru Gadu-Gadu')
  16.                             {
  17.                                 $sortowanewedlug="gadu";
  18.                             }
  19.                             if ($sortowanewedlug=='nicku Tlen')
  20.                             {
  21.                                 $sortowanewedlug="tlen";
  22.                             }
  23.                             if ($sortowanewedlug=='rangi')
  24.                             {
  25.                                 $sortowanewedlug="ranga";
  26.                             }
  27.                             if ($sortowanewedlug=='statusu')
  28.                             {
  29.                                 $sortowanewedlug="status";
  30.                             }
  31.                             if ($sortowanewedlug=='daty założenia/aktywacji konta')
  32.                             {
  33.                                 $sortowanewedlug="data";
  34.                             }
  35.                             if ($sortowanewedlug=='daty ostatniego logowania')
  36.                             {
  37.                                 $sortowanewedlug="ostatnie_logowanie";
  38.                             }
  39.                             if ($sortowanewedlug=='adresu IP')
  40.                             {
  41.                                 $sortowanewedlug="ostatnie_ip";
  42.                             }
  43.  
  44. // Zamiana wartości drgiej z opcji (wybór sposobu sortowania) na wartości wstawiane do zapytania.
  45.  
  46.                             if ($sortowaniejak=="")
  47.                             {
  48.                                 $sortowaniejak="";
  49.                             }
  50.                             if ($sortowaniejak=='rosnąco')
  51.                             {
  52.                                 $sortowaniejak="";
  53.                             }
  54.                             else if ($sortowaniejak=='malejąco')
  55.                             {
  56.                                 $sortowaniejak='DESC';
  57.                             }
  58.  
  59. // Zapytania są dwa, ponieważ w pierwszym sortuje się tylko według loginu, a w dru
    gim według wyrbanej opcji, a następnie według loginu.
  60.  
  61.                             if ($sortowanewedlug=='login')
  62.                             {
  63.                             $zapytanie = mysql_query("SELECT logowanie.login,count(komentarze.komentarz_id_uzytkownika) as ilosc_kom,count(ksiega.szept_id_uzytkownika) as ilosc_sze,logowanie.status,logowanie.id,logowanie.data,logowanie.email,
    logowanie.ostatnie_logowanie,logowanie.ostatnie_ip,logowanie.ostatni_host,logowan
    ie.gadu,logowanie.tlen,logowanie.imie,logowanie.ranga FROM logowanie LEFT JOIN ko
    mentarze ON logowanie.id=komentarze.komentarz_id_uzytkownika LEFT JOIN ksiega ON 
    logowanie.id=ksiega.szept_id_uzytkownika GROUP BY logowanie.id ORDER by login $so
    rtowaniejak"
    );
  64.                             }
  65.                             else
  66.                             {
  67.                             $zapytanie = mysql_query("SELECT logowanie.login,count(komentarze.komentarz_id_uzytkownika) as ilosc_kom,count(ksiega.szept_id_uzytkownika) as ilosc_sze,logowanie.status,logowanie.id,logowanie.data,logowanie.email,
    logowanie.ostatnie_logowanie,logowanie.ostatnie_ip,logowanie.ostatni_host,logowan
    ie.gadu,logowanie.tlen,logowanie.imie,logowanie.ranga FROM logowanie LEFT JOIN ko
    mentarze ON logowanie.id=komentarze.komentarz_id_uzytkownika LEFT JOIN ksiega ON 
    logowanie.id=ksiega.szept_id_uzytkownika GROUP BY logowanie.id ORDER by $sortowan
    ewedlug, login $sortowaniejak"
    );                            
  68.                             }
  69.  
  70.                             // WYŚWIETLANIE LISTY UŻYTKOWIKÓW z życiem powyższego zapytania
  71.                             
  72.                             while($wiersz=mysql_fetch_array ($zapytanie)) 
  73.                             { 
  74.                             } ?>


Trochę tego jest i jeśli tylko ktoś ma chwilę prosiłbym o przeanalizowanie. Bład nie wynika jednak z bazy, więc Nospor masz rację... :- )
W bazie w kolumnie gadu są 4 pola (trzy z jakimis numerami gadu w tym dwa identyczne i jeden pusty) za pusty próbowałem podstawić jakiś inny i i tak nie sortowało.

Sortowanie przebiega poprawnie na poziomie loginu, adresu e-mail statusu rangi, daty założenia/aktywacji konta, oraz adrsu ip (ostatniego). Sypie się natomast przy skype tlen i gadu.

HA! :- ) Znalazlem... dla zaintersowanych. W drugim zapytaniu było:

Cytat
ORDER by $sortowanewedlug, login $sortowaniejak


A powinno być:

Cytat
ORDER by $sortowanewedlug $sortowaniejak, login $sortowaniejak


Ten post edytował The Night Shadow 7.03.2006, 11:30:30


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
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: 24.07.2025 - 18:32