Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Sortowanie ligowej tableli, Problem złożony w sortowaniu
chipoldo
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 18.12.2008
Skąd: Gostyń/Reda

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


Problem dotyczy sortowania piłkarskiej tabeli ligowej. Operacje przeprowadzane są na dwóch tabelach bazy MySQL:

tabela
`tabela_id` ,`druzyna_id`, `liga_id`, `mecze`, `punkty`, `wygrane`, `remisy`, `przegrane`, `strzelone`, `stracone`, `roznica`


wyniki
`wynik_id`, `liga_id`, `data`, `kolejka`, `druzyna_id_1`, `druzyna_id_2`, `wynik_1`, `wynik_2`

Problem polega na tym, że ustalanie tabeli jest w następujący sposób:

- punkty, różnica bramek, bramki strzelone z tabeli `tabela`

- Przy równej ilości punktów drużyn drugim kryterium sortowania nie jest różnica bramek, a bezpośredni mecz (mecze) między tymi drużynami. Zrobiłem sortowanie funkcją uasort z własną funkcją, którą zamieszczam poniżej, ale niestety działa ona tylko w przypadku równej ilości punktów dwóch drużyn. W przypadku równej ilości punktów 3  lub więcej drużyn trzeba brać pod uwagę tzw. "małą tabelkę", czyli sortowanie między tymi drużynami odbywa się w kolejności punkty, różnica bramek, bramki strzelone tylko w meczach między tymi drużynami. Funkcja, którą ja sortuje, w przypadku więcej niż dwóch drużyn błędnie wyznacza wynik sortowania

Kod tabeli:

CODE


for ($i = 0; $i < $ilosc_znalezionych; $i++)
{
   $wiersz = $wynik->fetch_assoc();

   $tablica[$i][1] = $wiersz['nazwa_druzyny'];
   $tablica[$i][2] = $wiersz['mecze'];
   $tablica[$i][3] = $wiersz['punkty'];
   $tablica[$i][4] = $wiersz['wygrane'];
   $tablica[$i][5] = $wiersz['remisy'];
   $tablica[$i][6] = $wiersz['przegrane'];
   $tablica[$i][7] = $wiersz['strzelone'];
   $tablica[$i][8] = $wiersz['stracone'];
   $tablica[$i][9] = $wiersz['roznica'];
   $tablica[$i][10] = $wiersz['druzyna_id'];
}


//funkcja sortowania
function sortowanie($a, $b)
{
   if ( $a[3] == $b[3] )
//sprawdzenie bezpośredniego pojedynku między zainteresowanymi druzynami
{
   $zapytanie = "SELECT * FROM `wyniki` WHERE (druzyna_id_1 = {$a[10]} and druzyna_id_2 = {$b[10]}) or (druzyna_id_1 = {$b[10]} and druzyna_id_2 = {$a[10]});";
   $wynik = wyslij_zapytanie($zapytanie);
   $ilosc_znalezionych = $wynik->num_rows;
   for ($i = 0; $i < $ilosc_znalezionych; $i++)
   {
     $wiersz = $wynik->fetch_assoc();
     $druzyna_id_1 = $wiersz['druzyna_id_1'];
     $druzyna_id_2 = $wiersz['druzyna_id_2'];
     $wynik_1 = $wiersz['wynik_1'];
     $wynik_2 = $wiersz['wynik_2'];
       if (($a[10] == $druzyna_id_1) and ($b[10] == $druzyna_id_2))
       {
        if ($wynik_1 > $wynik_2)
        {
          $punktyA += 3;
        }
        else if ($wynik_1 < $wynik_2)
     [php]   {
           $punktyB += 3;
        }
        $bramkiA += $wynik_1;
        $bramkiB += $wynik_2;
       }
      else if (($b[10] == $druzyna_id_1) and ($a[10] == $druzyna_id_2))
      {
       if ($wynik_1 > $wynik_2)
       {
         $punktyB += 3;
       }
         if ($wynik_1 < $wynik_2)    
       {
         $punktyA += 3;
       }
       $bramkiB += $wynik_1;
       $bramkiA += $wynik_2;
     }
   }
    if ($punktyA < $punktyB)
    {
     return 1;
     }
     else if (punktyA > $punktyB)
     {
      return -1;
     }
      else if ($punktyA == $punktyB)
     {
     if ($bramkiA < $bramkiB)
       {
       return 1;
        }
         if ($bramkiA > $bramkiB)
         {
          return -1;
         }
         if ($bramkiA == $bramkiB)
         {
         if ($a[9] < $b[9])
          {
           return 1;
         }
         else if ($a[9] > $b[9])
         {
          return -1;
          }
          else if ($a[9] == $b[9])
          {
            if ($a[7] < $b[7])
            {
             return 1;
            }
          else if ($a[7] > $b[7])
          {
            return -1;
          }
          else if ($a[7] == $b[7])
          {
             if ($a[1] < $b[1])
              {
               return -1;
              }
             else if ($a[1] > $b[1])
              {
               return 1;
              }
             else
             {
              return 0;
             }
           }
        }
     }
   }
}
else if ( $a[3] < $b[3] )
return 1;
else if ( $a[3] > $b[3] )
return -1;
}
usort($tablica, 'sortowanie')




Ten post edytował chipoldo 26.02.2010, 10:53:43
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:28