Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak zliczyć dane ?
Forum PHP.pl > Forum > Przedszkole
slawek3422
Witam.
Przychodzę z banalnym problemem jakoś nie wiem jak policzyć pewną rzecz. Wyciągam z bazy danych kilka informacji szczątkowych, za pomocą PHP uzupełniam te dane i w efekcie dostaję na ekran taką oto tabelkę :
Tabelka

Teraz chcę wyciągnąć z niej informację ile razy wystąpiło B, ile C i ile D. To podsumowanie, które mam to nie to o co mi chodzi bo to jest czas trwania B, C i D, a nie ilość wystąpień. W wyniku mam dostać B= 3, C = 2, D = 0 nie wiem jak ... każdy wiersz tabelki jest wypisany za pomocą pętli. Kodu nie wklejam, bo żeby go ogarnąć to musiałbym cały skrypt wrzucić (jak będzie trzeba to to zrobię)
Pawel_W
może trochę jaśniej? smile.gif
slawek3422
Jak patrzysz na tabelkę to widzisz, że B wystąpiło 3 razy a C 2 razy. Tyle tylko, że ja muszę to uzyskać z obliczeń a nie z własnej obserwacji.
Pawel_W
Cytat(slawek3422 @ 19.04.2010, 21:19:11 ) *
Jak patrzysz na tabelkę to widzisz, że B wystąpiło 3 razy a C 2 razy. Tyle tylko, że ja muszę to uzyskać z obliczeń a nie z własnej obserwacji.

nie, nie widzę... oświeć mnie
slawek3422
W pierwszym poście dałem linka do tabelki, B jest na zielono
nospor
ja tez jakis tepy jestem i nie widzę by B wystąpiło 3 razy... oświeć i mnie jakim cudem ty widzisz B 3 razy. Ja go tam widze zdecydowanie wiecej razy smile.gif
Spawnm
Ja już widzę o co chodzi ... przez iteracje przepuścić można by każdą literkę i sprawdzać kiedy jest 1 a kiedy brak ... ale to pewnie mało optymalne.
nospor
@Spawnm jaki to widzisz algorytm tam, ze B występuje 3 razy? No podziel sie to moze i ja pomoge.
Spawnm
nospor patrz kolorkami , tu chodzi o ilość wystąpień grupowych
B wystąpiło 3 razy , najpierw raz , potem 7 razy pod rząd , potem 4 razy pod rząd
czyli iteruje sprawdzając czy jest 1 jeśli tak daje b++ i czeka aż nastąpi null, gdy znowu zaczynają się jedynki daje kolejne b++ ale tylko przy pierwszej jedynce itd.
nospor
aaa, teraz kumam smile.gif
No to mozna latwo wyliczyc na etapie tworzenia tabeli. Niestety przydałby się kod, by zobaczyc jak ta tabela jest tworzona.
slawek3422
heh, podejrzewałem, że nie będzie prosto wytłumaczyć o co mi chodzi smile.gif, teraz niestety jestem w pracy i nie mam dostępu do swojego kompa ale w okolicy 19:00 wrzucę cały skrypt

Proszę, oto kod:
  1. <?php
  2.  
  3. $_SESSION['b'] = 0;
  4. $_SESSION['c'] = 0;
  5. $_SESSION['d'] = 0;
  6. function cmp($a, $b){
  7. if ($a < $b)
  8. return - 1;
  9. if ($a > $b)
  10. return 1;
  11. return 0;
  12. }
  13. function roznica_dat($iniDate, $endDate)
  14. {
  15. $iniDate = explode("-", $iniDate);
  16. $endDate = explode("-", $endDate);
  17. $start_date = gregoriantojd($iniDate[1], $iniDate[2], $iniDate[0]);
  18. $end_date = gregoriantojd($endDate[1], $endDate[2], $endDate[0]);
  19. $dif = $end_date - $start_date;
  20. return $dif;
  21. }
  22. include ('../../../connect.php');
  23. if ($_GET['data_poczatkowa'] != null && $_GET['data_koncowa'] != null) {
  24. $od = $_GET['data_poczatkowa'];
  25. $do = $_GET['data_koncowa'];
  26. $wyrobisko = $_GET['wyrobisko'];
  27.  
  28. $query = mysql_query("SELECT id_skladowej_wyrobiska FROM skladowe_wyrobisk WHERE id_wyrobiska = $wyrobisko");
  29. while ($row = mysql_fetch_array($query)) {
  30. $skladowe .= $row['id_skladowej_wyrobiska'] . ", ";
  31. }
  32.  
  33. $skladowe = rtrim($skladowe, ", ");
  34.  
  35. $query1 = mysql_query("SELECT DISTINCT wzrosty_zmianowe.id_wzrostu_zmianowego FROM wzrosty_zmianowe, powiazanie_wzrostow, szczegoly_wzrostow WHERE czy_koniec = '1' AND wzrosty_zmianowe.id_wzrostu_zmianowego = powiazanie_wzrostow.id_wzrostu_zmianowego AND powiazanie_wzrostow.id_szczegolu_wzrostu = szczegoly_wzrostow.id_szczegolu_wzrostu AND szczegoly_wzrostow.id_skladowej_wyrobiska IN ($skladowe) AND szczegoly_wzrostow.od_daty >='$od' AND szczegoly_wzrostow.do_daty <= '$do' ORDER BY id_wzrostu_zmianowego DESC;");
  36. while ($row1 = mysql_fetch_array($query1)) {
  37. $wzrosty1 .= $row1['id_wzrostu_zmianowego'] . ", ";
  38. }
  39.  
  40. $wzrosty1 = rtrim($wzrosty1, ", ");
  41.  
  42. $query3 = mysql_query("SELECT id_wzrostu_zmianowego FROM powiazanie_wzrostow WHERE id_wzrostu_zmianowego IN ($wzrosty1) GROUP BY id_wzrostu_zmianowego;");
  43. while ($row3 = mysql_fetch_array($query3)) {
  44. $id_wzrostu_zmianowego = $row3['id_wzrostu_zmianowego'];
  45. echo '<table class="lista" align="center" cellpadding="3">';
  46. echo '<tr><td class="lista_kategoria_ogolne">Data / zmiana</td>';
  47. echo "<td class='lista_kategoria_ogolne'>B</td>
  48. <td class='lista_kategoria_ogolne'>C</td>
  49. <td class='lista_kategoria_ogolne'>D</td>
  50. </tr>";
  51.  
  52. $min_od_daty = mysql_query("SELECT min(od_daty) FROM szczegoly_wzrostow, powiazanie_wzrostow WHERE powiazanie_wzrostow.id_wzrostu_zmianowego = $id_wzrostu_zmianowego AND powiazanie_wzrostow.id_szczegolu_wzrostu = szczegoly_wzrostow.id_szczegolu_wzrostu");
  53. while ($row_min_od_daty = mysql_fetch_array($min_od_daty)) {
  54. $min_od = $row_min_od_daty['min(od_daty)'];
  55.  
  56. $min_od_zmiany = mysql_query("SELECT min(od_zmiany) FROM szczegoly_wzrostow, powiazanie_wzrostow WHERE powiazanie_wzrostow.id_wzrostu_zmianowego = $id_wzrostu_zmianowego AND powiazanie_wzrostow.id_szczegolu_wzrostu = szczegoly_wzrostow.id_szczegolu_wzrostu AND szczegoly_wzrostow.od_daty = '$min_od'");
  57. while ($row_min_od_zmiany = mysql_fetch_array($min_od_zmiany)) {
  58. $min_oz = $row_min_od_zmiany['min(od_zmiany)'];
  59. }
  60. }
  61. $max_do_daty = mysql_query("SELECT max(do_daty) FROM szczegoly_wzrostow, powiazanie_wzrostow WHERE powiazanie_wzrostow.id_wzrostu_zmianowego = $id_wzrostu_zmianowego AND powiazanie_wzrostow.id_szczegolu_wzrostu = szczegoly_wzrostow.id_szczegolu_wzrostu");
  62. while ($row_max_do_daty = mysql_fetch_array($max_do_daty)) {
  63. $max_do = $row_max_do_daty['max(do_daty)'];
  64.  
  65. $max_do_zmiany = mysql_query("SELECT max(do_zmiany) FROM szczegoly_wzrostow, powiazanie_wzrostow WHERE powiazanie_wzrostow.id_wzrostu_zmianowego = $id_wzrostu_zmianowego AND powiazanie_wzrostow.id_szczegolu_wzrostu = szczegoly_wzrostow.id_szczegolu_wzrostu AND szczegoly_wzrostow.do_daty = '$max_do'");
  66. while ($row_max_do_zmiany = mysql_fetch_array($max_do_zmiany)) {
  67. $max_dz = $row_max_do_zmiany['max(do_zmiany)'];
  68. }
  69. }
  70. $sekundy = (strtotime($max_do) - strtotime($min_od));
  71. $dni = $sekundy/86400;
  72. $zmiany_na_dzien = '3';
  73.  
  74. $zmiany = ($dni*$zmiany_na_dzien) - 3;
  75.  
  76. if($min_oz == "1"){
  77. $dodaj = "3";
  78. }
  79. if($min_oz == "2"){
  80. $dodaj = "2";
  81. }
  82. if($min_oz == "3"){
  83. $dodaj = "1";
  84. }
  85.  
  86. if($max_dz == "1"){
  87. $dodaj1 = "1";
  88. }
  89. if($max_dz == "2"){
  90. $dodaj1 = "2";
  91. }
  92. if($max_dz == "3"){
  93. $dodaj1 = "3";
  94. }
  95.  
  96. $suma = $dodaj + $zmiany + $dodaj1;
  97. $s = $s + $suma;
  98.  
  99. $i = 0;
  100. $g = rtrim($g, ", ");
  101. $geo = explode(", ", $g);
  102. $nowe = array();
  103.  
  104. $q = mysql_query("SELECT od_daty, od_zmiany, do_daty, do_zmiany, id_stanu_zagrozenia FROM szczegoly_wzrostow, powiazanie_wzrostow WHERE powiazanie_wzrostow.id_wzrostu_zmianowego = $id_wzrostu_zmianowego AND powiazanie_wzrostow.id_szczegolu_wzrostu = szczegoly_wzrostow.id_szczegolu_wzrostu;");
  105. while ($r = mysql_fetch_array($q)) {
  106. $od_d = $r['od_daty'];
  107. $do_d = $r['do_daty'];
  108. $od_z = $r['od_zmiany'];
  109. $do_z = $r['do_zmiany'];
  110. $idsz = $r['id_stanu_zagrozenia'];
  111.  
  112. $ww .= $od_d . " " . $od_z . " " . $do_d . " " . $do_z . " " . $idsz . ",";
  113. }
  114.  
  115. $re = explode(",", $ww);
  116. $licz = count($re) - 1;
  117.  
  118. for ($i = 0; $i <= $licz; $i++) {
  119. $p = explode(" ", $re[$i]);
  120.  
  121. for ($j = $p[0]; $j <= $p[2]; $j++) {
  122. if ($j != $p[0] && $j != $p[2]) {
  123. array_push($nowe, $j . " A " . $p[4]);
  124. array_push($nowe, $j . " B " . $p[4]);
  125. array_push($nowe, $j . " C " . $p[4]);
  126. }
  127. if ($j == $p[0] && $j == $p[2]) {
  128. if ($p[1] == 1 && $p[3] == 1) {
  129. array_push($nowe, $j . " A " . $p[4]);
  130. }
  131. if ($p[1] == 1 && $p[3] == 2) {
  132. array_push($nowe, $j . " A " . $p[4]);
  133. array_push($nowe, $j . " B " . $p[4]);
  134. }
  135. if ($p[1] == 1 && $p[3] == 3) {
  136. array_push($nowe, $j . " A. " . $p[4]);
  137. array_push($nowe, $j . " B " . $p[4]);
  138. array_push($nowe, $j . " C " . $p[4]);
  139. }
  140. if ($p[1] == 2 && $p[3] == 2) {
  141. array_push($nowe, $j . " B " . $p[4]);
  142. }
  143. if ($p[1] == 2 && $p[3] == 3) {
  144. array_push($nowe, $j . " B " . $p[4]);
  145. array_push($nowe, $j . " C " . $p[4]);
  146. }
  147. if ($p[1] == 3 && $p[3] == 3) {
  148. array_push($nowe, $j . " C " . $p[4]);
  149. }
  150. }
  151. if ($j == $p[0] && $j != $p[2]) {
  152. if ($p[1] == 1) {
  153. array_push($nowe, $j . " A " . $p[4]);
  154. array_push($nowe, $j . " B " . $p[4]);
  155. array_push($nowe, $j . " C " . $p[4]);
  156. }
  157. if ($p[1] == 2) {
  158. array_push($nowe, $j . " B " . $p[4]);
  159. array_push($nowe, $j . " C " . $p[4]);
  160. }
  161. if ($p[1] == 3) {
  162. array_push($nowe, $j . " C " . $p[4]);
  163. }
  164. }
  165. if ($j != $p[0] && $j == $p[2]) {
  166. if ($p[3] == 1) {
  167. array_push($nowe, $j . " A " . $p[4]);
  168. }
  169. if ($p[3] == 2) {
  170. array_push($nowe, $j . " A " . $p[4]);
  171. array_push($nowe, $j . " B " . $p[4]);
  172. }
  173. if ($p[3] == 3) {
  174. array_push($nowe, $j . " A " . $p[4]);
  175. array_push($nowe, $j . " B " . $p[4]);
  176. array_push($nowe, $j . " C " . $p[4]);
  177. }
  178. }
  179. }
  180. }
  181.  
  182. $sum = count($nowe) - 1;
  183. for ($e = 0; $e <= $sum; $e++) {
  184. $n[] = explode(" ", $nowe[$e]);
  185. }
  186.  
  187. usort($n, "cmp");
  188. $m = array();
  189. for ($q = 0; $q <= $sum; $q++) {
  190. if ($n[$q][0] == $n[$q + 1][0] && $n[$q][1] == $n[$q + 1][1] && $n[$q][2] == $n[$q +1][2]) {
  191. unset($n[$q]);
  192. } else {
  193. array_push($m, $n[$q][0] . " " . $n[$q][1] . " " . $n[$q][2]);
  194. }
  195. }
  196. ?>
  197.  


  1. <?php
  2. $sum1 = count($m) - 1;
  3. for ($x = 0; $x <= $sum1; $x++) {
  4. $z[] = explode(" ", $m[$x]);
  5. }
  6.  
  7. $b = 0;
  8. $c = 0;
  9. $d = 0;
  10.  
  11. for ($f = 0; $f <= $sum1; $f++) {
  12. if ($z[$f][0] == $z[$f + 1][0] && $z[$f][1] == $z[$f + 1][1]) {
  13. echo "<tr><td class='lista'>" . $z[$f][0] . " / " . $z[$f][1];
  14. $stan = max($z[$f][2], $z[$f + 1][2]);
  15. if ($stan == 2) {
  16. $b = $b + 1;
  17. echo "<td class='lista_be'>1</td><td class='lista'>-</td><td class='lista'>-</td></tr>";
  18. }
  19. if ($stan == 3) {
  20. $c = $c + 1;
  21. echo "<td class='lista'>-</td><td class='lista_ce'>1</td><td class='lista'>-</td></tr>";
  22. }
  23. if ($stan == 4) {
  24. $d = $d + 1;
  25. echo "<td class='lista'>-</td><td class='lista'>-</td><td class='lista_de'>1</td></tr>";
  26. }
  27. $f++;
  28. } else {
  29. echo "<tr><td class='lista'>" . $z[$f][0] . " / " . $z[$f][1];
  30. $stan = $z[$f][2];
  31. if ($stan == 2) {
  32. $b = $b + 1;
  33. echo "<td class='lista_be'>1</td><td class='lista'>-</td><td class='lista'>-</td></tr>";
  34. }
  35. if ($stan == 3) {
  36. $c = $c + 1;
  37. echo "<td class='lista'>-</td><td class='lista_ce'>1</td><td class='lista'>-</td></tr>";
  38. }
  39. if ($stan == 4) {
  40. $d = $d + 1;
  41. echo "<td class='lista'>-</td><td class='lista'>-</td><td class='lista_de'>1</td></tr>";
  42. }
  43. }
  44. }
  45. echo "<tr><td class='lista' align='right'><b>Podsumowanie : </b></td><td class='lista'><b>" .
  46. $b . "</b></td><td class='lista'><b>" . $c . "</b></td><td class='lista'><b>" .
  47. $d . "</b></td></tr></table>";
  48. echo "<br>";
  49. $_SESSION['b'] = $_SESSION['b'] +$b;
  50. $_SESSION['c'] = $_SESSION['c'] +$c;
  51. $_SESSION['d'] = $_SESSION['d'] +$d;
  52. $suma_b = $_SESSION['b'];
  53. $suma_c = $_SESSION['c'];
  54. $suma_d = $_SESSION['d'];
  55.  
  56. unset($nowe);
  57. unset($m);
  58. unset($n);
  59. unset($z);
  60. unset($ww);
  61. $f=0;
  62. }
  63.  
  64. $query2 = mysql_query("SELECT nazwa_wyrobiska FROM wyrobiska WHERE id_wyrobiska = $wyrobisko;");
  65. while ($row2 = mysql_fetch_array($query2)) {
  66. $w = $row2['nazwa_wyrobiska'];
  67. $ilosc = explode(", ", $wzrosty1);
  68. $ile = count($ilosc);
  69. echo "<table class='lista'><tr><td class='lista'>W wybranym okresie w <b>" . $w ."</b>";
  70.  
  71. if(strlen($ile) == 1){
  72. if($ile == 1){
  73. echo " wystąpił <b>".$ile. "</b> wzrost zmianowy, który trwał <b>".$s."</b> zmian.<br>Stan B wystąpił x razy i trwał <b>".$_SESSION['b']."</b> zmian<br>Stan C wystąpił x razy i trwał <b>".$_SESSION['c']."</b> zmian<br>Stan D wystąpił x razy i trwał <b>".$_SESSION['d']."</b> zmian<br>";
  74. }
  75. if($ile == 2 || $ile == 3 || $ile == 4){
  76. echo " wystąpiły <b>".$ile. "</b> wzrosty zmianowe, które trwały łącznie <b>".$s."</b> zmian.<br>Stan B wystąpił x razy i trwał <b>".$_SESSION['b']."</b> zmian<br>Stan C wystąpił x razy i trwał <b>".$_SESSION['c']."</b> zmian<br>Stan D wystąpił x razy i trwał <b>".$_SESSION['d']."</b> zmian<br>";
  77. }
  78. }
  79.  
  80. echo "</td></tr></table>";
  81. }
  82. } else {
  83. ?>
  84. <form>
  85. <input type="hidden" name="user" value="<?php echo $user; ?>" />
  86. <table>
  87. <tr>
  88. <td>Wyrobisko :&nbsp;</td><td>
  89.  
  90. <select id="wyrobisko" class="lista"><option value="0">-- wybierz --</option>
  91. <?php
  92.  
  93. $query = mysql_query("SELECT * FROM wyrobiska ORDER BY id_wyrobiska ASC;");
  94. while ($row = mysql_fetch_array($query)) {
  95. echo "<option value='" . $row['id_wyrobiska'] . "'>" . $row['nazwa_wyrobiska'] .
  96. "</option>";
  97. }
  98. ?>
  99. </select>
  100. </td>
  101. </tr>
  102. <tr>
  103. <td>Data początkowa :&nbsp;</td><td><input type="text" id='data_poczatkowa' maxlength="10" size="10"></td>
  104. </tr>
  105. <tr>
  106. <td>Data końcowa :&nbsp;</td><td><input type="text" id='data_koncowa' maxlength="10" size="10" value="<?php echo
  107. date('Y-m-d'); ?>"></td>
  108. </tr>
  109. <tr>
  110. <td colspan="2" align='center'><br><input type="button" value="Pokaż" onclick='wzrosty_z_okresu();'>&nbsp;&nbsp;&nbsp;<input type="reset" value="Wyczyść"></td>
  111. </table>
  112. </form>
  113.  
  114. <?php
  115. }
  116. ?>
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.