Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] funkcja "passy"
Forum PHP.pl > Forum > Przedszkole
modern
Witam, szukałem na tym forum, znalazłem jeden temat, który tego dotyczył, ale nikt w nim nie odpowiedział...
Mój problem polega na tym że mam baze danych w ktorej jest kolumna "zwyciezca"
w tabeli tej, gdy dodaje kolejne rekordy pokazuje się id użytkownika, lub w przypadku remisu pozostaje puste.
Zrobiłem statystyki dla poszczegolnego użytkownika typu Wygranych: 12 | Przegranych: 3 | Remisów: 0
Teraz potrzebuje jeszcze tak zwanej passy.
Np. użytkownik ma mecze o ID:
1: wygrana
2: wygrana
3: przegrana
4: wgrana

To jego passa to +1 ponieważ mecz o ID 4 jest najnowszym a zaraz za nim jest przegrana, więc tylko +1
Inny użytkownik ma:
1: wygrana
2: przegrana
3: przegrana

Jego passa to -2 bo dwa ostatnie mecze to przegrane
Kolejny użytkownik:
1. wygrana
2: przegrana
3: remis

Passa: 0

Myślałem że sobie z tym poradzę... robiłem pętle pokazującą wszystkie mecze
I sprawdzała, jeżeli poprzedni mecz był wygrany i obecny jest wygrany to +1
w przeciwnym wypadku sprawdzałem czy to był remis czy przegrana, tylko jeżeli przegrana to już nie wiedziałem jak dalej to rozgryźć...

Ktoś potrafi mi pomóc?
Z góry dzięki za wszelkie komentarze
PUPI
  1. <?php
  2. // tablica z wynikami meczow: 2 - wygrana, 1 - przegrana, 0 - remis
  3. $aTablicaWynikow = array( 2,2,0,0,2,1,1,2,2,1,1,);
  4.  
  5. function Passa( $aWyniki )
  6. {
  7. $iIloscWynikow = count($aWyniki) - 1;
  8. $iPassa = 0;
  9. $iRodzajWyniku = $aWyniki[$iIloscWynikow];
  10. if ( $iRodzajWyniku != 0 )
  11. {
  12. for ( $i = $iIloscWynikow; $i > 0; --$i )
  13. {
  14. if ( $aWyniki[$i] == $iRodzajWyniku )
  15. {
  16. ++$iPassa;
  17. }
  18. else
  19. {
  20. break;
  21. }
  22. }
  23. if ( $iRodzajWyniku == 1 )
  24. {
  25. $iPassa = -$iPassa;
  26. }
  27. }
  28. return $iPassa;
  29. }
  30.  
  31.  
  32. echo 'PASSA: '.Passa($aTablicaWynikow);
  33. ?>
modern
Ok, sprawdzałem działa, tylko nie potrafię wstawić w array moich wyników...

  1. <?php
  2. $wyniki = "SELECT * FROM battle WHERE agresor = '$id_profil' || obronca = '$id_profil' ORDER BY id DESC";
  3. $wyniki = mysql_query("$wyniki");
  4. while($passa = mysql_fetch_array($wyniki))
  5.  {
  6.  
  7.  if($passa[zwyciezca] == $profil[id])
  8. {
  9.  if($wyniczki == '')
  10. { $wyniczki = '2'; }
  11.  else
  12. { $wyniczki = $wyniczki.',2'; }
  13. }
  14.  else
  15. {
  16.  
  17. if($passa[zwyciezca] == '')
  18.  {
  19. if($wyniczki == '')
  20.  { $wyniczki = '0'; }
  21. else
  22.  { $wyniczki = $wyniczki.',0'; }
  23.  }
  24. else
  25.  {
  26. if($wyniczki == '')
  27.  { $wyniczki = '1'; }
  28. else
  29.  { $wyniczki = $wyniczki.',1'; }
  30.  
  31.  }
  32.  
  33. }
  34.  
  35.  }
  36. ?>


no i zmienna $wyniczki zawiera cyferki 0,1,2 ... ale jak to do array wstawic :/
nitek
Cytat
zmienna $wyniczki zawiera cyferki 0,1,2 ... ale jak to do array wstawic :/


Jeśli pytasz o to, co myślę, to php.net... :

explode — Split a string by string
Description
array explode ( string $delimiter, string $string [, int $limit] )


  1. <?php
  2.  // Example 1
  3.  $pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
  4.  $pieces = explode(" ", $pizza);
  5.  echo $pieces[0]; // piece1
  6.  echo $pieces[1]; // piece2
  7.  
  8.  // Example 2
  9.  $data = "foo:*:1023:1000::/home/foo:/bin/sh";
  10.  list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
  11.  echo $user; // foo
  12.  echo $pass; // *
  13.  
  14.  ?>


W Twoim przypadku (z tego co napisałeś wyżej), $delimiter, to ",", czyli:

  1. <?php
  2. $tablica=explode (",",$wyniczki);
  3. ?>
modern
dzięki, zadziałało biggrin.gif
dr_bonzo
  1. SELECT sum( sss.wynik ) FROM stats sss WHERE agresor = 1 AND obronca = 4 AND id > (SELECT ss.id AS ostatni_inny_wynik_id FROM stats ss WHERE agresor = 1 AND obronca = 4 AND wynik <> (SELECT s.wynik AS ostatni_wynik FROM stats s WHERE agresor = 1 AND obronca = 4 ORDER BY id DESC LIMIT 1 ) ORDER BY id DESC LIMIT 1 ) ORDER BY id DESC


co to robi (od najbardziej wewnetrznego query)
- szuka ostatniego wyniku
- szuka ID ostatniego wyniku roznego od tego znalezionego wyzej (dzieki czemu wiemy ile ostatnich wynikow zliczyc)
- i zlicza nowsze wyniki od tego ostatniego o innym wyniku

zalozenia
- ID decyduje o kolejnosci dodania, im wieksze tym pozniejszy wynik
- zwyciestwo: 1, porazka: -1, remis: 0

co trzeba poprawic(dorobic)
- gdy brak wynikow miedzy graczami
- gdy mamy tylko 1 wynik (prosty count)
- gdy od poczatku mielismy tylko 1 typ wyniku (prosty count grupujacy wg wynikow)
- jak dostajesz null to np. nie grali ze soba
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.