Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Ciągi obliczanie ilości liczy w ciągu
Forum PHP.pl > Forum > Przedszkole
ghastblood
Witam,

mam taki problem zapisuje do bazy danych ciągi od 0 do 10 dlugość 10 cyfr oddzielona przecinkiem (10,10,9,8,8,9,9,8,8,7)

potrzebuje policzyć ile razy występuje dana cyfra a konkretnie aż do rozstrzgnięcia wyniku

np

zawdonik 1
string(21) "10,10,9,8,8,9,9,8,8,7"
zawodnik 2
string(19) "9,9,9,9,8,9,9,8,8,8"

jedenk i drugi zawonik mają ten sam wynik czyli 86

więc w zasadzie są na tym samy miejscu

aby rozstrzygnąć kto jest lepszy należy policzyć ilość 10 ,9, 8 aż do rozstrzygnięcia czyli zawodnik 1 jest na pierwszym miejscu bo ma 2x10 a zawodnik 2 jest na drugim miejscu bo ma 0x10 jeżeli zawodniczy mają tyle samo 10 to sprawdzana jest kolejna cyfra czyli może być zawodnik 1 2x10, 3x9 4x8 zawodnik 2 2x10, 3x9, 3x8 i takie dane potrzebuje zapisać do bazy danych.
Pyton_000
Pobierasz sobie z bazy ciąg
robisz explode
obliczasz sumę - jeśli różne to wygrywa lepszy, jeśli takie same to:
- sortujesz malejąco
- pobierasz max z obu ciągów - jeśli różne wygrywa większy, jeśli takie same to:
sprawdzasz ilość wartości - jeśli więcej to wygrywa, jeśli tyle samo zmniejszasz max -1 i znowu sprawdzasz tablice i tak do znudzenia.
Crozin
Przede wszystkim popraw strukturę bazy danych. Te wyniki (pojedyncze) powinny być osobnymi rekordami w tabeli związanej relacją wiele-do-jednego z tabelą użytkownika. Wtedy wybranie sumy jest banalnie proste:
  1. SELECT u.id, SUM(p.points) FROM users u LEFT JOIN scores s ON u.id = s.user_id
A i sortowanie da się zrealizować na poziomie SQL-a - seria COUNT-ów na poszczególnych ocenach (GROUP BY) i zwykłe ORDER BY.
ghastblood
moja struktura baz danych wygląda tak

zawodnik
-zaw_id
-imie
-nazwisko

konkurencje_zawodnika
-kz_id
-id_zawodnika
-id_konkurencji

wyniki
-id_zawodnika
-ciag
-suma
-uwagi1
-uwagi2

wolał bym tego nie zmieniać bo wymagało by to przerobienia praktycznie całego kodu nad którym siedzę już trochę czasu



Na razie mam coś takiego teraz tylko muszę jakoś porównać wartości z tablicy i zwrócić wynik dla zawodnik 1 2x10 a dla zawodnik 2 1x10 żeby te dane zapisać do bazy danych
i jakoś sprawdzić kolejny wyniki z tablicy w przypadku kiedy 10 będzie występowało tyle samo razy

  1. <?php
  2.  
  3.  
  4. $str0 = '10,10,9,9,9,9,8,8,8,7';
  5. $str1 = '10,9,9,9,9,9,8,8,8,8';
  6.  
  7. $resSum0 = "";
  8. $resSum1 = "";
  9.  
  10. $sum0 = explode(',', $str0);
  11. $sum1 = explode(',', $str1);
  12.  
  13. foreach($sum0 as $key=>$value)
  14. {
  15. $resSum0 += $value;
  16. }
  17.  
  18.  
  19. foreach($sum1 as $key=>$value)
  20. {
  21. $resSum1 += $value;
  22. }
  23.  
  24.  
  25. $zawodnik_dodawny = explode(',', $str0);
  26. $zawodnik_istniejący = explode(',', $str1);
  27.  
  28. $res0 = array_count_values($zawodnik_dodawny);
  29. $res1 = array_count_values($zawodnik_istniejący);
  30.  
  31.  
  32. foreach($res0 as $key => $value)
  33. {
  34. $res0 = $value.'x'.$key.'<br>';
  35. $arr0[] = $res0;
  36. }
  37.  
  38. foreach($res1 as $key => $value)
  39. {
  40. $res1 = $value.'x'.$key.'<br>';
  41. $arr1[] = $res1;
  42. }
  43.  
  44. ?>
  45.  
  46. <table style="border:1px solid;" rules="all">
  47. <tr>
  48. <th>Zawodnik 1</th>
  49. <th>Zawodnik 2</th>
  50. </tr><tr>
  51. <td><?php echo $arr0[0]; ?></td>
  52. <td><?php echo $arr1[0]; ?></td>
  53. </tr><tr>
  54. <td><?php echo $arr0[1]; ?></td>
  55. <td><?php echo $arr1[1]; ?></td>
  56. </tr><tr>
  57. <td><?php echo $arr0[2]; ?></td>
  58. <td><?php echo $arr1[2]; ?></td>
  59. </tr><tr>
  60. <td><?php echo $arr0[3]; ?></td>
  61. <td></td>
  62. </tr>
  63. <tr>
  64. <td><?php echo $resSum0; ?></td>
  65. <td><?php echo $resSum1; ?></td>
  66. </tr>
  67. </table>
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.