Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zapytanie z sortowaniem
Forum PHP.pl > Forum > Przedszkole
fredzio90
otóż chciałbym pokazywać aktualne miejsce danej pozycji, sortując wyniki od największej ilości do najmniejszej sortując pole il_glosów...
sticker
pokaz co masz , jakis schemat bd
SongoQ
Moze Cie interesuje to co prond na swoim blogu napisal http://blog.axent.pl/ szukaj "MySQL i rownum()"
fredzio90
poczytałem, i niestety nic ciekawego nie zrozumiałem.... ja chcę proste zapytanko, np.:

  1. SELECT * FROM tabela WHERE typ='ok' ORDER BY il_glosow ASC


mając takie zapytanie, dajmy na to umieścimy wybieranie z bazy w pętli while, i mi chodzi o podanie "numerków" na których znajdują się wpisy, nie NR ID, tylko jakby numer w rankingu, np.:

nr_wpisu/ilość wszystkich wpisów


Baza danych:

  1. CREATE TABLE `ranking_dj` (
  2. `id` int(8) NOT NULL AUTO_INCREMENT ,
  3. `dodal` text NOT NULL DEFAULT '',
  4. `title` text NOT NULL ,
  5. `imie` text NOT NULL ,
  6. `nazwisko` text NOT NULL DEFAULT '',
  7. `hobby` text NOT NULL DEFAULT '',
  8. `opis` text NOT NULL DEFAULT '',
  9. `zdjecie` text NOT NULL DEFAULT '',
  10. `www` text NOT NULL DEFAULT '',
  11. `data_ur` varchar(25) NOT NULL DEFAULT '',
  12. `odslony` int(6) NOT NULL DEFAULT '',
  13. `typ` varchar(4) NOT NULL DEFAULT '0',
  14. `il_glosow` int(6) NOT NULL DEFAULT '0',
  15. PRIMARY KEY (`id`)
  16. ) ENGINE = MYISAM ;
SongoQ
No to ok. Przeciez o tym pisal. Cos takiego jak numerowanie rekordow i ten numer przekazujesz sobie jako pole w zapytaniu i to da Ci numer kolejny lub robisz to podczas odczytu w php i numerujesz w petli odczytu
fredzio90
oki, niewiem czy to by zadziałało:

  1. <?php
  2. $sql = mysql_query("SELECT id, il_glosow, rank() OVER (partition by id order by il_glosow ASC) as rank FROM $rank_dj_tbl WHERE rank=1");
  3. ?>


jezeli by to działało, to co musze dodać do tego aby pokazać numerki, wystarczy mysql_num_rows" title="Zobacz w manualu PHP" target="_manual questionmark.gif
uli
Cytat(fredzio90 @ 29.06.2007, 02:28:08 ) *
otóż chciałbym pokazywać aktualne miejsce danej pozycji, sortując wyniki od największej ilości do najmniejszej sortując pole il_glosów...




  1. <?php
  2. var $ilosc_glosow_kolesia_do_spradzenia;
  3.  
  4. $z = "SELECT * FROM ranking_dj WHERE il_glosow>$ilosc_glosow_kolesia_do_spradzenia";
  5. $w = mysql_query($z);
  6. $ilosc_pol_majacych_wiecej_glosow = mysql_num_rows($w);
  7.  
  8. $z1 = "SELECT * FROM ranking_dj";
  9. $w1 = mysql_query($z1);
  10. $ilosc_wszystkich = mysql_num_rows($w1);
  11.  
  12. $pozycja = $ilosc_pol_majacych_wiecej_glosow + 1;
  13. echo "Jesteś na pozycji $pozycja z $ilosc_wszystkich";
  14. ?>



A jeśli chcesz listing wszystkich to po co jakies pola w bazie??

Dajesz zapytanie (takie jak Twoje):

  1. <?php
  2. $licznik = 1;
  3. $z = "SELECT * FROM tabela WHERE typ='ok' ORDER by il_glosow ASC";
  4. $w = mysql_query($z);
  5. while (mysql_fetch_row($w))
  6. {
  7. echo "Pozycja nr $licznik:<br>";
  8. // TU WYCIAGASZ DANE
  9.  
  10. $licznik++;
  11. }
  12. ?>
fredzio90
niestety niewiem, ale ciągle ( mam 5 pozycji ) pokazuje pozycję : 1/5

początek moej funckji:

  1. <?php
  2. function dj_show() {
  3. global $id, $rank_dj_tbl, $rank_dj_vote_tbl, $REMOTE_ADDR, $gnick, $color, $gnick;
  4.  
  5. $sql = mysql_query("SELECT * FROM $rank_dj_tbl WHERE typ='ok' AND title='$id'");
  6. $nums = @mysql_num_rows($sql);
  7.  
  8.  
  9. if($nums==0) {
  10. echo '<br /><center>Brak podanego profilu DJ-a</center>';
  11.  
  12. } else {
  13.  
  14.  
  15. $rr = mysql_fetch_array($sql);
  16.  
  17. $ids = $rr['id'];
  18. $pseudo = $rr['title'];
  19. $www = $rr['www'];
  20. $opis = $rr['opis'];
  21. $foto = $rr['zdjecie'];
  22. $ilosc_glosow_kolesia_do_spradzenia = $r['il_glosow'];
  23.  
  24. $z = "SELECT * FROM $rank_dj_tbl WHERE il_glosow>$ilosc_glosow_kolesia_do_spradzenia";
  25. $w = mysql_query($z);
  26. $ilosc_pol_majacych_wiecej_glosow = @mysql_num_rows($w);
  27.  
  28. $z1 = "SELECT * FROM $rank_dj_tbl";
  29. $w1 = mysql_query($z1);
  30. $ilosc_wszystkich = mysql_num_rows($w1);
  31. $pozycja = $ilosc_pol_majacych_wiecej_glosow + 1;
  32. ?>


i niestety ciągle widniej wartość 1/ilość wszyskich wpisów

//EDIT

ja nie daje tego w listingu, ja poprostu chcę pokazać miejsce w widoku profilu, niemam tam pętli while, bo jest zbędna, do wyciągnięcia 1 wpisu ;D
uli
Pewnie że jeden...

Linia 22:

  1. <?php
  2. $ilosc_glosow_kolesia_do_spradzenia = $r['il_glosow'];
  3. ?>


A czym odbierasz dane?? $rr

Poprawnie:

  1. <?php
  2. $ilosc_glosow_kolesia_do_spradzenia = $rr['il_glosow'];
  3. ?>
fredzio90
racja mój błąd, poprawka, działa doskonale ;P

Dziękuje bardzo guitar.gif
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.