Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak posortować wg liczby punktów
Forum PHP.pl > Forum > Bazy danych > MySQL
romek510
Mam pewien problem napisałem skrypt który oblicza statystyki i wyświetla tabele, problem w tym ze chce wyniki posortować wg ilosci zdobytych punktów, ale nie mam pojęcia jak przy tym skrypcie to zrobić.
  1. <?php
  2.  
  3. $zap=mysql_query("SELECT * FROM `reprezentacje`
  4. WHERE `ms_grupa`=".$_GET['grupa']);
  5.  
  6.  
  7.  
  8. for ($l=0;$l<mysql_num_rows($zap);$l++)
  9. {
  10.  
  11.  
  12. $zap1=mysql_query("SELECT sum( if( `druzyna1` =".$k['id_reprezentacji']." AND `gole_dr1` > `gole_dr2` OR `druzyna2` =".$k['id_reprezentacji']." AND `gole_dr1` < `gole_dr2` , 1, 0 ) ) AS zw,
  13. sum( if( `druzyna1` =".$k['id_reprezentacji']." AND `gole_dr1` < `gole_dr2` OR `druzyna2` =".$k['id_reprezentacji']." AND `gole_dr1` > `gole_dr2` , 1, 0 ) ) AS prz,
  14. sum( if( `gole_dr1` = `gole_dr2` , 1, 0 ) ) AS re,
  15. sum( if( `druzyna1` =".$k['id_reprezentacji'].", `gole_dr1` , if( `druzyna2` =".$k['id_reprezentacji'].", `gole_dr2` , 0 ) ) ) AS bramkistrzelone,
  16. sum( if( `druzyna1` =".$k['id_reprezentacji'].", `gole_dr2` , if( `druzyna2` =".$k['id_reprezentacji'].", `gole_dr1` , 0 ) ) ) AS bramkistracone,
  17. sum( if( `druzyna1` =".$k['id_reprezentacji']." AND `gole_dr1` > `gole_dr2` OR `druzyna2` =".$k['id_reprezentacji']." AND `gole_dr1` < `gole_dr2` , 1, 0 ) )*3+sum( if( `gole_dr1` = `gole_dr2` , 1, 0 ) ) AS punkty
  18. FROM `mecze` WHERE `druzyna1` =".$k['id_reprezentacji']." OR `druzyna2` =".$k['id_reprezentacji']." ");
  19. for($i=0;$i<mysql_num_rows($zap1);$i++)
  20. {
  21. $s=mysql_fetch_assoc($zap1);
  22. $il_meczy=$s['zw']+$s['prz']+$s['re'];
  23. $miejsce=$l+1;
  24. echo "<tr onMouseOver=\"this.style.background='green'\" onMouseOut=\"this.style.background='black'\">";
  25. echo "<td>".$miejsce."</td>";
  26. echo"<td align='left'>".$k['reprezentacja']."</td>";
  27. echo"<td width='40' align='center'>".$il_meczy."</td>";
  28. echo"<td width='20' align='center'>".$s['punkty']."</td>";
  29. echo"<td width='40' align='center'>".$s['zw']."</td>";
  30. echo"<td width='40' align='center'>".$s['re']."</td>";
  31. echo"<td width='40' align='center'>".$s['prz']."</td>";
  32. echo "<td align='center'>".$s['bramkistrzelone']." : ".$s['bramkistracone']."</td>";
  33.  
  34. }
  35. }
  36.  
  37. ?>
eccocce
Może uda ci się wykorzystać klauzulę ORDER BY w zapytaniu MySQL?
http://dev.mysql.com/doc/refman/4.1/en/ord...timization.html
romek510
W drugim zapytniu order by nic nie da bo wyswietla sie tylko i wyłącznie jeden rekord po przejsciu pętli wiec sortowanie w taki sposób nie pomoże.
Mchl
Połącz oba zapytaina JOINem i możesz sortować. I sprawdź warunki w tych ifach. Na moje oko brakuje tam nawiasów tu i ówdzie.
romek510
Nawiasy sa w porządku, i nie wiem jak to połączyć joinem aby odpowiednio działało
Mchl
Jakoś tak:
Kod
SELECT
  r.id_reprezentacji,
  r.reprezentacja,
  SUM(IF(m.druzyna1 = r.id_reprezentacji AND m.gole_dr1 > m.gole_dr2 OR m.druzyna2 = r.id_reprezentacji AND m.gole_dr1 < m.gole_dr2 , 1, 0 ) ) AS zw,
  SUM(IF(m.druzyna1 = r.id_reprezentacji AND m.gole_dr1 < m.gole_dr2 OR m.druzyna2 = r.id_reprezentacji AND m.gole_dr1 > m.gole_dr2 , 1, 0 ) ) AS prz,
  SUM(IF(m.gole_dr1 = m.gole_dr2 , 1, 0 ) ) AS re,
  ...
FROM
  reprezentacje AS r
LEFT JOIN
  mecze AS m
ON
  (m.druzyna1 = r.id_reprezentacji OR m.druzyna2 = r.id_reprezentacji)
WHERE
  `ms_grupa` = ?
GROUP BY
  r.id_reprezentacji,
  r.reprezentacja
ORDER BY
  punkty DESC


romek510
Wielkie dzieki, wszystko ładnie śmiga.
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.