Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak posortować wg liczby punktów
romek510
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 21.12.2009

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował romek510 13.03.2010, 16:16:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
eccocce
post
Post #2





Grupa: Zarejestrowani
Postów: 165
Pomógł: 5
Dołączył: 10.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Może uda ci się wykorzystać klauzulę ORDER BY w zapytaniu MySQL?
http://dev.mysql.com/doc/refman/4.1/en/ord...timization.html
Go to the top of the page
+Quote Post
romek510
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 21.12.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Mchl
post
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
romek510
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 21.12.2009

Ostrzeżenie: (0%)
-----


Nawiasy sa w porządku, i nie wiem jak to połączyć joinem aby odpowiednio działało
Go to the top of the page
+Quote Post
Mchl
post
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


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


Go to the top of the page
+Quote Post
romek510
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 21.12.2009

Ostrzeżenie: (0%)
-----


Wielkie dzieki, wszystko ładnie śmiga.
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: 26.12.2025 - 02:23