Napisałem tabelę dla strony sportowej, która miała sortować zespoły wg punktów, a jeżeli ilość punktów jest równa to według bilansu (małe punkty zdobyte do straconych). Niestety zmienił się regulamin i wymaga to ingerencji w kod, z którym nie bardzo umiem sobie poradzić.

Dokładnie chodzi o to, że w przypadku równej ilości punktów dwóch lub większej ilości drużyn liczy się mała tabelka (punkty, lub znów bilans) tylko pomiędzy tymi drużynami, która odpowiada na przykład za kolejność na miejscach 9-11. Niestety nie umiem tego rozwiązać. Czy ktoś ma jakiś pomysł na takie zapytanie? Poniżej prezentuję cały kod, ale mogę zedytować tylko dla zapytania, żeby nie było bałaganu smile.gif

  1. <? 
  2.  
  3. function multi_sort($array, $akey)
  4. { 
  5. function compare($a, $b)
  6. {
  7.  global $key;
  8.  return strcmp($a[$key], $b[$key]);
  9. }
  10. usort($array, "compare");
  11. return $array;
  12. }
  13.  
  14. function tab_plk_duza() { 
  15. static $color;
  16. if($color == "#f6f6f6") {
  17. $color = "#efefef";
  18. } else {
  19. $color = "#f6f6f6";
  20. }
  21. return($color);
  22. }
  23.  
  24. $miejsce = 0;
  25.  
  26.  
  27. $sql = "SELECT klub FROM klub WHERE poddzial=29 ORDER BY klub";
  28. $wynik = mysql_query($sql);
  29. $id=Array();
  30. $i=0;
  31.  
  32. while ($row = mysql_fetch_array($wynik)) {
  33.  
  34. $sql="SELECT SUM(tabele.punkty) AS punkty, (SUM(zdobyte)/SUM(stracone)) AS bilans FROM klub,tabele WHERE klub.poddzial=29 AND tabele.rozgrywki=4 A
    ND tabele.sezon=2007 AND klub.klub="
    .$row["klub"]." AND tabele.klub=".$row["klub"]." ORDER BY punkty,bilans DESC";
  35. $res = mysql_fetch_array(mysql_query($sql));
  36. $id[$i]['bilans'] = $res['bilans'];
  37. $id[$i]['punkty'] = $res['punkty'];
  38. $id[$i]['klub'] = $row['klub'];
  39. $i++;
  40. }
  41.  
  42.  
  43. /*
  44. foreach($id as $res)
  45.  $sortAux[] = $res['bilans'];
  46. array_multisort($sortAux, SORT_DESC, $id);
  47. */
  48.  
  49. $i=0;
  50. foreach ($id as $res2) {
  51.  $matrix[0][$i]=$res2['punkty'];
  52.  $matrix[1][$i]=$res2['bilans'];
  53.  $matrix[2][$i]=$res2['klub'];
  54.  $i++;
  55. }
  56.  
  57. array_multisort($matrix[0], SORT_DESC, SORT_NUMERIC,$matrix[1], SORT_DESC, SORT_NUMERIC,$matrix[2], SORT_DESC, SORT_NUMERIC);
  58.  
  59. //print_r($matrix);
  60.  
  61.  
  62. $i=0;
  63. $id2=Array();
  64.  
  65. foreach ($id as $res) {
  66.  $id2[$i]['bilans']=$matrix[1][$i];
  67.  $id2[$i]['punkty']=$matrix[0][$i];
  68.  $id2[$i]['klub']=$matrix[2][$i];
  69.  $i++;
  70. }  
  71.  
  72.  
  73. foreach ($id2 as $tab) 
  74. {
  75.  
  76.  
  77. $sql = "SELECT MAX(zdobyte) AS max_zdobyte, MAX(stracone) AS max_stracone, SUM(p+w) AS mecze, SUM(punkty) AS punkty, SUM(zdobyte) AS zdobyte, SUM(stracone) AS stracone, SUM(w) AS w, SUM(p) AS p, (SUM(zdobyte)/SUM(stracone)) AS bilans, AVG(zdobyte) AS srednia_zdobyte, AVG(stracone) AS srednia_stracone FROM tabele WHERE rozgrywki=4 AND sezon=2007 AND klub='".$tab['klub']."'";
  78. $wynik = mysql_query($sql);
  79.  
  80.  
  81. while ($r = mysql_fetch_array($wynik)) {
  82.  
  83. $mecze = $r["mecze"];
  84. $punkty = $r["punkty"];
  85. $w = $r["w"];
  86. $p = $r["p"];
  87. $srednia_zdobyte = $r["srednia_zdobyte"];
  88. $srednia_stracone = $r["srednia_stracone"];
  89. $max_zdobyte = $r["max_zdobyte"];
  90. $max_stracone = $r["max_stracone"];
  91. $stracone = $r["stracone"];
  92. $zdobyte = $r["zdobyte"];
  93. $bilans = $r["bilans"];
  94.  
  95. $srednia_zdobyte = substr($srednia_zdobyte, 0,4);
  96. $srednia_stracone = substr($srednia_stracone, 0,4);
  97.  
  98.  
  99. $q = "SELECT zespol FROM klub WHERE klub='".$tab['klub']."'";
  100. $r = mysql_query($q);
  101.  while ($row = mysql_fetch_array($r)) {
  102.  $zespol = $row["zespol"]; 
  103.  //$klub = $row["klub"]; 
  104.  
  105.  //$zespol = ereg_replace("$klub", "$nklub", $zespol);
  106.  }
  107. }
  108.  
  109. $bgcolor = tab_plk_duza();
  110.  
  111. print "<TR><TD width=20 align=right bgcolor=$bgcolor><font id=tabela>";
  112. print ++$miejsce.".</font></TD>
  113. <TD width=180 bgcolor=$bgcolor><A HREF=/klub/".$tab['klub']." class=b2>$zespol</a></TD>
  114. <TD align=center width=25 bgcolor=$bgcolor><font id=tabela>$mecze</FONT></TD>
  115. <TD align=center width=25 bgcolor=$bgcolor><font id=tabela>$w</FONT></TD>
  116. <TD align=center width=25 bgcolor=$bgcolor><font id=tabela>$p</FONT></TD>
  117. <TD align=center width=25 bgcolor=$bgcolor><font id=tabela>".$tab['punkty']."</FONT></TD>
  118. <TD align=right width=30 bgcolor=$bgcolor><font id=tabela>$zdobyte</FONT></TD>
  119. <TD align=center width=5 bgcolor=$bgcolor><font id=tabela>:</FONT></TD>
  120. <TD align=left width=30 bgcolor=$bgcolor><font id=tabela>$stracone</FONT></TD>
  121. <TD align=center width=40 bgcolor=$bgcolor><font id=tabela>".$tab['bilans']."</FONT></TD>
  122. <TD align=center width=40 bgcolor=$bgcolor><font id=tabela>$srednia_zdobyte</FONT></TD>
  123. <TD align=center width=40 bgcolor=$bgcolor><font id=tabela>$srednia_stracone</FONT></TD>
  124. <TD align=center width=40 bgcolor=$bgcolor><font id=tabela>$max_zdobyte</FONT></TD>
  125. <TD align=center width=40 bgcolor=$bgcolor><font id=tabela>$max_stracone</FONT></TD>
  126. </TR>";
  127.  
  128. }
  129.  
  130. ?>