Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] tablica i wyświetlenie danych
Forum PHP.pl > Forum > Przedszkole
limonides
zacznę od początku :-)
mam dwie bazy : zawodnik oraz ratings
zawodnik (id, imie, nazwisko, kraj)
ratings (id, total_votes, total_value)

z tych dwóch baz chcę zrobić sobie ranking :-)

obliczyłem średnią i wpisałem ją do tablicy łącznie z numerem ID.

  1. Array ( [0] => Array ( [0] => 1 [1] => 9.5 ) [1] => Array ( [0] => 3 [1] => 4 ) )




  1. if ($_GET['menu'] == 'ranking') {
  2. $query=" SELECT * FROM ratings";
  3. $result = mysql_query($query);
  4. $num = mysql_numrows($result);
  5. $row = mysql_fetch_array($result);
  6. $i=0;
  7. while ($i < $num) {
  8. $id=mysql_result($result,$i,"id");
  9. $suma=mysql_result($result,$i,"total_value");
  10. $ilosc_glosow=mysql_result($result,$i,"total_votes");
  11. $srednia = ($suma / $ilosc_glosow);
  12. $tablica[] = array($id , $srednia);
  13. ++$i;
  14. }
  15. sort($tablica);
  16. print_r($tablica);
  17. }



i teraz się moje pytanie bo już niedomagam :/
jak mam wyświetlić zamiast ID imię i nazwisko zawodnika z bazy zawodnik
nadmienię iż ID w obu bazach dla danego zawodnika są takie same.
Larges
Nie lepiej pobrać wszystkie dane z obu tabel naraz?

Polecam zapoznanie się z LEFT JOIN: http://dev.mysql.com/doc/refman/5.0/en/lef...timization.html

Pobierzesz wszystkie pola do tablicy wraz z imieniem i nazwiskiem.
limonides
dzięki serdecznie za poprzednią poradę była bardzo pomocna

chciałbym jeszcze się dowiedzieć jak mogę normalnie wyśtietlić te dane posegregowane po średniej [3]
a nie tak jak poniżej przez print_r

  1. Array ( [0] => Array ( [0] => 3 [1] => Milena [2] => Sadurek [3] => 4 ) [1] => Array ( [0] => 1 [1] => Anna [2] => Barańska [3] => 9.5 ) )



dobra co do wyświetlania to już doszedłem jak :-)

może ktoś napisze mi jak posegregować tablice według pola średnia
jasin
Przeanalizuj sobie oto taki przykład - sortowanie z użyciem funkcji usort:
  1. $test = array(
  2. array(3, 'zawodnik imie', 'zawodnik nazwisko', 3),
  3. array(4, 'zawodnik imie 2', 'zawodnik nazwisko 2', 32),
  4. array(5, 'zawodnik imie 3', 'zawodnik nazwisko 3', 4),
  5. array(6, 'zawodnik imie 4', 'zawodnik nazwisko 4', 4.5),
  6. array(7, 'zawodnik imie 5', 'zawodnik nazwisko 5', 1.8),
  7. );
  8.  
  9. function myCmp($arrA, $arrB) {
  10. if ($arrA[3] == $arrB[3]) {
  11. return 0;
  12. }
  13. return ($arrA[3] < $arrB[3]) ? -1 : 1;
  14. }
  15.  
  16. usort($test, "myCmp");
  17.  
  18. echo '<pre>';
  19. var_export($test);
limonides
dzięki wielkie za podpowiedź była ona nieoceniona

zrobiłem trocszku inaczej

  1. function sortuj($a, $b)
  2. {
  3. return strcmp($a['3'], $b['3']);
  4. }
  5. usort($tablica, 'sortuj');
  6. #
  7. echo '<pre>';
  8. var_export($tablica);






ale wynik mam taki sam jak w tym co napisałeś powyżej tylko jeszcze jeden mały szczególik bo segreguje mi od najmniejszej wartości do największej


  1. 0 =>
  2. 0 => '5',
  3. 1 => 'a',
  4. 2 => 'a',
  5. 3 => 1,
  6. ),
  7. 1 =>
  8. 0 => '6',
  9. 1 => 'z',
  10. 2 => 'z',
  11. 3 => 2,
  12. ),
  13. 2 =>
  14. 0 => '3',
  15. 1 => 'Milena',
  16. 2 => 'Sadurek',
  17. 3 => 4,
  18. ),
  19. 3 =>
  20. 0 => '2',
  21. 1 => 'Manon',
  22. 2 => 'Flier',
  23. 3 => 7,
  24. ),
  25. 4 =>
  26. 0 => '1',
  27. 1 => 'Anna',
  28. 2 => 'Barańska',
  29. 3 => 9.5,
  30. ),
  31. )





a nie dało by rady aby segregowało od największej do najmniejszej questionmark.gif

kallosz
po posortowaniu usort i przypisaniu do zmiennej spróbuj posortować rsort zeby odwrócic kolejność
limonides
nie wiem czy dobrze ale zrobiłem coś takiego i niestety nie odwróciło mi tej tablicy

  1. function sortuj($a, $b)
  2. {
  3. return strcmp($a['3'], $b['3']);
  4. }
  5. usort($tablica, 'sortuj');
  6. $stablica = array($tablica);
  7. rsort($stablica);
  8. echo '<pre>';
  9. var_export($stablica);


coś mi śmierdzi że chyba nie tak przypisałem do zmiennej sciana.gif
jasin
No to jeszcze raz mój przykład i w funkcji pomocniczej zamieniamy miejscami -1 i 1:
  1. $test = array(
  2. array(3, 'zawodnik imie', 'zawodnik nazwisko', 3),
  3. array(4, 'zawodnik imie 2', 'zawodnik nazwisko 2', 32),
  4. array(5, 'zawodnik imie 3', 'zawodnik nazwisko 3', 4),
  5. array(6, 'zawodnik imie 4', 'zawodnik nazwisko 4', 4.5),
  6. array(7, 'zawodnik imie 5', 'zawodnik nazwisko 5', 1.8),
  7. );
  8.  
  9. function myCmp($arrA, $arrB) {
  10. if ($arrA[3] == $arrB[3]) {
  11. return 0;
  12. }
  13. return ($arrA[3] < $arrB[3]) ? 1 : -1;
  14. }
  15.  
  16. usort($test, "myCmp");
  17.  
  18. echo '<pre>';
  19. var_export($test);

i w ten sposób mamy odwrotna kolejność sortowania.
limonides
teraz jest bajecznie :-)
jeszcze raz podziękował serdecznie jasin exclamation.gif

można zamknąć temat
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.