Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Sortowanie z pustymi rekordami
The Night Shadow
post
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.
Go to the top of the page
+Quote Post
TomASS
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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?
Go to the top of the page
+Quote Post
nospor
post
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
Go to the top of the page
+Quote Post
The Night Shadow
post
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
Go to the top of the page
+Quote Post

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 - 15:09