Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie danych z bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
Phomerus
Witam,
zalozmy ze z bazy danych pobieram ID i SKOK- skok jest liczba
$zapytanie = mysql_query("SELECT ID, SKOK FROM costam");
i teraz moge to wyswietlic za pomoca petly while, ale jak zrobic zeby wszystkie te wyniki posortowaly sie w taki sposob zeby najpierw wyswietlalo najwyzsza wartosc a potem nizsze?
czyli np:
ID SKOK
ktos 123
ktos2 122
ktos3 118
itp, itd
nospor
to jest pytanie z baz. przenosze

  1. SELECT ID, SKOK
  2. FROM costam ORDER BY SKOK DESC;
Phomerus
zeby nie tworzyc nowego tematu pytani\e zadam tutaj
robie tak:
  1. <?php
  2. $zapytanie = mysql_query("SELECT id, skok FROM ipsrekordy WHERE skocznia='Polska' order by skok desc");
  3. $wynik= mysql_fetch_array($zapytanie);
  4. echo $wynik['id']."-<b><font size="6">".$wynik['skok']."</font></b>-jakasdata-pobierz dziadostwo<BR>";
  5. while($wynik= mysql_fetch_array($zapytanie)){
  6. echo $wynik['id']."-<b>".$wynik['skok']."</b>-jakasdata-pobierz dziadostwo<BR>";
  7. ?>

Pierwszy wynik wyswietlam przed petla bo chce go wyroznic wieksza czcionka, ale co bedzie jak beda 2 takie same najdalsze wyniki? Co zrobic zeby obydwa byly wyroznione?

EDIT: Troche pomyslalem i juz sobie poradzilem... wklepie kod mozekomus sie przyda:
  1. <?
  2. $zapytanie = mysql_query("SELECT id, skok FROM ipsrekordy WHERE skocznia='Polska' order by skok desc");
  3. $wynik= mysql_fetch_array($zapytanie);
  4. $zapytanie1 = mysql_query("SELECT id FROM ipsrekordy WHERE skocznia='Polska' AND skok='$wynik[skok]'");
  5. $wynik1 = mysql_num_rows($zapytanie1);
  6. If($wynik1>1){
  7. echo $wynik['id']."-<b><font size="6">".$wynik['skok']."</font></b>-jakasdata-pobierz dziadostwo<BR>";
  8. for($counter=$wynik1 -1; $counter>0; $counter--){
  9. $wynik= mysql_fetch_array($zapytanie);
  10. echo $wynik['id']."-<b><font size="6">".$wynik['skok']."</font></b>-jakasdata-pobierz dziadostwo<BR>";
  11. }
  12. while($wynik= mysql_fetch_array($zapytanie)){
  13. echo $wynik['id']."-<b>".$wynik['skok']."</b>-jakasdata-pobierz dziadostwo<BR>";
  14. }
  15. }
  16. else{
  17. echo $wynik['id']."-<b><font size="6">".$wynik['skok']."</font></b>-jakasdata-pobierz dziadostwo<BR>";
  18. while($wynik= mysql_fetch_array($zapytanie)){
  19. echo $wynik['id']."-<b>".$wynik['skok']."</b>-jakasdata-pobierz dziadostwo<BR>";
  20. }
  21. }
  22. ?>
nospor
wszystko ladnie pięknie, ale...
stosujesz dodatkowe zbedne zapytanie do bazy. A zasada jest prosta: im mniej zapytan do bazy - tym lepiej

pomine juz fakt ze ten kod jest malo przejrzysty.
To co chcesz zrobic to juz na poziomie php sie robi:

  1. <?php
  2.  
  3. $zapytanie = mysql_query("SELECT id, skok FROM ipsrekordy WHERE skocznia='Polska' order by skok desc");
  4. $wynik= mysql_fetch_array($zapytanie);
  5. $bestResult = null;
  6. while($wynik= mysql_fetch_array($zapytanie)){
  7.     $skok = $wynik['skok'];
  8.     if (is_null($bestResult) || $skok == $bestResult){
  9.         $bestResult = $skok;
  10.         echo $wynik['id']."-<b><font size="6">$skok</font></b>-jakasdata-pobierz dziadostwo<BR>";
  11.     }
  12.     else
  13.         echo $wynik['id']."-<b>$skok</b>-jakasdata-pobierz dziadostwo<BR>";
  14. }
  15.  
  16. ?>

i tylko jedno zapytanie i kodu mniej smile.gif
Phomerus
hmm i znowu mam problem, otoz chce to wszystko ponumerowac... i jezeli znajda sie gdzies takie same wyniki to zeby mialy takie samo miejsce a numer za nim byl odpowiednio powiekszony czyli np.

1. ktos1
1. ktos
3.ktos2
3.ktos3
3.ktos 4
6. ktos 5
Probowalem cos wymyslec ale nie dalem rady:/... moze na razie podajcie mi jakas koncepcje jak to zrobic, a nie gotowy kod.. moze sam go napisze smile.gif
nospor
dwie dodatkowe zmienne: $poz1 - takie same pozycje
, $poz2 - kolejne numery

zaczunasz od zera
- jesli aktualny rekord ma te pozycje rozna od poprzedniej lub jest to pierwszy rekord - zwiekszasz $poz2 a do $poz1 przypisujesz $poz2
- w przeciwnym wypadku zwiekszasz tylko $poz2 a $poz1 pozostawiasz bez zmian
SongoQ
Na bazie niestety nie zrobisz tego.
Phomerus
Dzieki! Wszystko dziala!
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.