Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Sortowanie z pustymi rekordami
Forum PHP.pl > Forum > Przedszkole
The Night Shadow
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.
TomASS
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.
The Night Shadow
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?
nospor
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
The Night Shadow
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
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.