Skrypt php błąd wyciagania niektó©ych danych

0

Mam taki problem mam skrypt, który wyciąga dane, a następnie oblicza przedziały, dla których dana substancja była brana codziennie przykładowo
2017-02-02 - 2017-04-04
Tutaj nie była brana
2018-04-06 - 2018-08-30
No i tak przeszukuje wszystkie daty
I teraz mam problem, że jak przykładowo jakaś substancja obojętnie jaka będzie się dzień zaczynał w roku 2016 i skończy też w 2016 roku to w tym przedziale nie zanotuje brania danych substancji.
I dla nie, których danych jest błąd typu niezdefiniowny offest 0

Daje kod źródłowy

  private function rysuj_produkty($daty_produktow,$czy_grupa_substancji = "") {
  $wspolne = new \App\Http\Controllers\wspolne();
//licznik
  $i = 0;
    $j = 0;
//zmienna dla poszczególnych dat
    $z = 0;
    $k = 0;
    $data1 = array();

    $suma2 = 0;
//zmienna do określenia czy zakończyliśmy dany wpis
    $bool = false;
    if (Input::get("godzina_a") != "") $daty_produktow .= " and  hour(data) >= " . Input::get("godzina_a") ."  order by data";
    if (Input::get("godzina_b") != "") $daty_produktow .= " and hour(data) <= " . Input::get("godzina_b") ."  order by data";
    $daty_produktow .= " group by data1,data2,data3 ";

    $daty_produktow = DB::select($daty_produktow);
    $ile = count($daty_produktow);
    $liczba_dni = 0;
    foreach ($daty_produktow as $data_produktow2) {
    
      $tablica[$i][0] = $data_produktow2->data1;
      $tablica[$i][1] = $data_produktow2->data2;
      $tablica[$i][2] = $data_produktow2->data3;
      $tablica[$i][3] = $data_produktow2->porcja;
      $tablica[$i][4] = $data_produktow2->id_produktu;
      $daty_wziecia = array();

      
      if ($i > 0 ) {
/obliczanie różnic w datach
      $wynik = $wspolne->dateDifference($tablica[$i-1][0] . "-" . $tablica[$i-1][1] . "-" . $tablica[$i-1][2] . " 05:00:00", $tablica[$i][0] . "-" . $tablica[$i][1] . "-" . $tablica[$i][2]  . " 05:00:00");
      }
      else {
	$wynik = $wspolne->dateDifference($tablica[$i][0] . "-" . $tablica[$i][1] . "-" . $tablica[$i][2] . " 05:00:00", $tablica[$i][0] . "-" . $tablica[$i][1] . "-" . $tablica[$i][2]  . " 05:00:00");
      }

      print "<br>";

      print $wynik;
     
      print "<br>";
      if ($wynik > 1) {
      print "<font color=red>" . $tablica[$i][0] . "</font> " . "<font color=red>" . $tablica[$i][1] . "</font> " . "<font color=red>" . $tablica[$i][2] . "</font> ";

	
	if ($bool == false) {
	$data1[$z][0] = $tablica[$i][0] . "-" . $tablica[$i][1] . "-" . $tablica[$i][2];
	$bool = true;
	


	$suma2 = 0;
	$j = 0;
	}
	else  {
	if ($j == 0) {
	  $data1[$z][2] = 0;
	}
	else {
	$data1[$z][2] = $tablica[$i][3] / $j;
	}

	$data1[$z][1] = $tablica[$i-1][0] . "-" . $tablica[$i-1][1] . "-" . $tablica[$i-1][2];
	$bool = false;
	
	}
	if ($bool == false) {
	$z++;
	}
	
      }

      
      
      if ($ile-1 == $i ) {

	print "dddd";
	$data1[$z][1] = $tablica[$i][0] . "-" . $tablica[$i][1] . "-" . $tablica[$i][2];
	if ($j != 0) {
	$data1[$z][2] = $suma2 / $j;
	}


      }
      $j++;
	
	


      if ($i > 0 and ($tablica[$i][3] != $tablica[$i-1][3] and $wynik > 86400)) {
	$data1[$z][0] = $tablica[$i][0] . "-" . $tablica[$i][1] . "-" . $tablica[$i][2];

      }
      $i++;
    }
    
  //var_dump($data1);
  
  foreach ($data1 as $data2) {
  
  print $data2[0] . "-" .  $data2[1]  .  " " .  $data2[2] . "<br>";
  }
  //var_dump($data1);
  }

Przepraszam trochę za ten kod, ale nie mogłem prościej napisać.

2

najlepiej jakbyś przemyślał kilka spraw, bo jesteś już 4 lata na forum, a robisz ciągle te same błędy: polskie nazwy zmiennych, funkcji, komentarze, brak spacji po przecinkach, brak camelCase, mieszanie html z php
ja bym wrócił do podstaw i szlifował dobre praktyki http://pl.phptherightway.com

0

A może, ja chcę używać polskich nazw funkcji i zmiennych i tylko tymczasowo mieszam html i php.

Tylko, że nazwy typu $data1,$suma2, czy $data_produktow2 zwyczajnie źle się czyta. Przy dużym nagromadzeniu takich rzeczy, tak jak u Ciebie w kodzie, można dostać kociokwiku.

group by data1,data2,data3

W ogóle jakie zapytanie chcesz żeby poleciało do bazy? Grupując do polu typu datetime trzeba wziąć pod uwagę to, że masz tam czas przechowywany co do sekundy (a często milisekundy) i często przez tak wielką dokładność grupowanie nie wychodzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1