Autor Zpráva
jtfcobra
Profil
První záznam měsící a poslední záznam v měsíci jak to prosím udelat ? Neni tohle kravina?

function zacatekmesice($merak,$mesic,$rok)
{
  global $db,$hostname_test,$username_test,$password_test;
  $data111=mysql_query("SELECT hodiny FROM spotreba where idmeraku = '$merak' and Year(datum) = '$rok' and Month(datum) = '$mesic' order by id ASC LIMIT 1",$db);
  while ($zaznam = mysql_fetch_array($data111))
  {
  $M=$zaznam["hodiny"];
  };
  return $M;
};

function konecmesice($merak1,$mesic1,$rok1)
{
  global $db,$hostname_test,$username_test,$password_test;
  $data222=mysql_query("SELECT hodiny FROM spotreba where idmeraku = '$merak1' and Year(datum) = '$rok1' and Month(datum) = '$mesic1' order by id DESC LIMIT 1",$db);
  while ($zaznam2 = mysql_fetch_array($data222))
  {
  $L=$zaznam2["hodiny"];
  };
  return $L;
};
Kcko
Profil
1) While nepotřebujes
2) Nikam se neposouváš, pořád píšeš ten kód jak před 10 roky (viz žádná databázová vrstva, globalní proměnné)
3) Použitím MySQL funkcí přicházíš o indexy, výběr bude pomalejší. Rozhodně by bylo vhodnější něco jako WHERE datum BETWEEN '2017-01-01' AND '2017-01-31 23:59:59' // pokud je to datetime, pokud date tak bez hodin:minut:vteřin
4) Funguje Ti to? Pokud ano, tak proč se ptáš.
jtfcobra
Profil
Ano funguje to ale chtel bych proste zlepsit kod...abych nepsal stale blby kody :)
Kcko
Profil
jtfcobra:
A ty někde pracuješ? Nemáš nad sebou seniora, který by Tě někam vedl?
Začni minimálně Tím, že začneš používat nějakou databázovou vrstvu, která bude bezpečnější a pohodlnější na použití. Např. dibiphp.com

PS. A reaguj na založené topicy, zodpovídal jsem Ti tuším nedávno nějakou otázku a bez odpovědi.
jtfcobra
Profil
Udelal jsem si funkcni s ukladanim ale trva to dlouho a nevim proc ..poradite?

function prepocetmesic($merak,$mesic,$rok)
{
  global $db,$hostname_test,$username_test,$password_test;
  
  // Zacatek
  $data111=mysql_query("SELECT hodiny,datum FROM cem1melnik.spotreba where idmeraku = '$merak' and Year(datum) = '$rok' and Month(datum) = '$mesic' order by id ASC LIMIT 1",$db);
  while ($zaznam = mysql_fetch_array($data111))
  {
  $zacatek=$zaznam["hodiny"];
  $zacatekdatum=$zaznam["datum"];
  };
  
  // Konec 
  $data222=mysql_query("SELECT hodiny,datum,seriovecislo FROM cem1melnik.spotreba where idmeraku = '$merak' and Year(datum) = '$rok' and Month(datum) = '$mesic' order by id DESC LIMIT 1",$db);
  while ($zaznam2 = mysql_fetch_array($data222))
  {
  $konec=$zaznam2["hodiny"];
  $konecdatum=$zaznam2["datum"];
  $seriovecislo=$zaznam2["seriovecislo"];
  };
  
  // Vypocet spotrebre
  $spotreba=$konec-$zacatek;
  echo 'ID Meraku:'.$merak.'</br>';
  echo 'Rok:'.$rok.'</br>';
  echo 'Mesic:'.$mesic.'</br>';
  echo $zacatekdatum.' Zacatek:'.$zacatek.'</br>';
  echo $konecdatum.' Konec:'.$konec.'</br>';
  echo 'Spotreba: '.$spotreba.'</br>';
  
  
  // Ulozeni
  $data444=mysql_query("SELECT idmeraku FROM cem1melnik.spotreba_mesicni where Year(datum) = '$rok' and Month(datum) = '$mesic'",$db);
  while ($zaznam3 = mysql_fetch_array($data444))
  {
  if ($zaznam3["idmeraku"]==$merak) 
          { 
        $idmeraku3=$zaznam3["idmeraku"];
        $data555=mysql_query("UPDATE cem1melnik.spotreba_mesicni SET zacatek ='$zacatek', zacatekdatum = '$zacatekdatum' , konec ='$konec', konecdatum = '$konecdatum' , spotreba = '$spotreba' , datum = '$konecdatum'  WHERE idmeraku='$idmeraku3' ",$db); 
        echo 'Aktualizovano';
        } 
          else 
        {   $data333=mysql_query("INSERT INTO cem1melnik.spotreba_mesicni ( idmeraku , seriovecislo , zacatek , zacatekdatum , konec , konecdatum , spotreba , datum ) VALUES ( '$merak' , '$seriovecislo', '$zacatek', '$zacatekdatum', '$konec' , '$konecdatum' , '$spotreba' , '$konecdatum' ) ",$db); 
        echo 'Pridano';
        };
  };
 
 
};


$data666=mysql_query("SELECT IDMERAKU FROM cem1melnik.meridla ",$db);
while ($zaznam6 = mysql_fetch_array($data666)){
  prepocetmesic($zaznam6["IDMERAKU"],date('m'),date('Y'));
};    
?>
Kcko
Profil
Příčin může být spousta:

Chybějící indexy nad sloupečky, které používáš k výběru dat (vše za WHERE nebo ORDER)
Používáš MySQL funkce, které neumí použít indexy nad sloupci, např. MONTH, YEAR ...
Používáš dotazy ve vnořených cyklech, takže se může vykonat velké množství dotazů.

Začni debugovat, zjisti si kolik se použije dotazů, zda-li se používají indexy, máš-li je vůbec nastavené a zkus si udělat EXPLAIN těch dotazů, abys zjistil kolik zaberou a jak se dají zoptimalizovat.

PS. Pořád to píšeš jako prase ten kód, už jsem Ti jednou říkal, ať začneš používat nějakou databazovou vrstvu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: