Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Jak zliczyć dane ?
slawek3422
post 19.04.2010, 19:29:07
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


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ę)

Ten post edytował slawek3422 19.04.2010, 19:30:06
Go to the top of the page
+Quote Post
Pawel_W
post 19.04.2010, 20:14:50
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


może trochę jaśniej? smile.gif
Go to the top of the page
+Quote Post
slawek3422
post 19.04.2010, 20:19:11
Post #3





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


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.
Go to the top of the page
+Quote Post
Pawel_W
post 19.04.2010, 20:38:31
Post #4





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


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
Go to the top of the page
+Quote Post
slawek3422
post 20.04.2010, 08:39:17
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


W pierwszym poście dałem linka do tabelki, B jest na zielono
Go to the top of the page
+Quote Post
nospor
post 20.04.2010, 08:42:14
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Spawnm
post 20.04.2010, 08:52:59
Post #7





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




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.
Go to the top of the page
+Quote Post
nospor
post 20.04.2010, 09:04:06
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@Spawnm jaki to widzisz algorytm tam, ze B występuje 3 razy? No podziel sie to moze i ja pomoge.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Spawnm
post 20.04.2010, 09:38:50
Post #9





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




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.
Go to the top of the page
+Quote Post
nospor
post 20.04.2010, 09:42:08
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
slawek3422
post 20.04.2010, 18:36:52
Post #11





Grupa: Zarejestrowani
Postów: 142
Pomógł: 7
Dołączył: 3.08.2007
Skąd: śląsk

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


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. ?>


Ten post edytował slawek3422 20.04.2010, 18:36:33
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 Wersja Lo-Fi Aktualny czas: 23.06.2025 - 16:53