Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Ciągi obliczanie ilości liczy w ciągu
ghastblood
post
Post #1





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


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>
Go to the top of the page
+Quote Post

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: 21.08.2025 - 04:36