Jump to content

Code optimisation - very slow execution


budimir

Recommended Posts

Guys,

 

I have made one script for calculating some values and inserting it in database, but it's soooooo slow. It calculates for around 120.000 rows, or more. I tried to find why is it so slow, but I don't get it. Also, have tried to change some coding, but it didn't help a lot.

 

Do you have any ideas, what I could do to make it at least a bit faster.

 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php include ("../admin/servis/include/session.php");?>


<?php
//skupljanje podataka za povlacenje stavaka iz tablica - poslano iz formi
$odabir_cjenika = $_POST["odabir_cjenika"];
$odabir_zavisnih = $_POST["odabir_zavisnih"];
$odabir_marza_drezga = $_POST["odabir_marza_drezga"];
$odabir_marza_dileri = $_POST["odabir_marza_dileri"];
$vrijeme = date("Y.m.d H:i:s");
$datum = date("Y.m.d");



//dohvačanje naziva i vrste kalkulacije za punjenje zaglavlja kalkulacije
$upit55 = "SELECT * FROM kalkulacija_import_cjenik WHERE id = '$odabir_cjenika'";
$rezultat55 = mysql_query($upit55) or die (mysql_error());
while($row = mysql_fetch_array($rezultat55)){
  $naziv_cjenika = $row["naziv"];
  $vrsta_cjenika = $row["vrsta"];
 }


//Ubacivanje zaglavlja kalkulacije i prikaz ID-a te kalkulacije za povezivanje sa stavkama
$upit111 = "INSERT INTO kalkulacija (datum, vrijeme, naziv, vrsta) VALUES ('$datum','$vrijeme','$naziv_cjenika','$vrsta_cjenika')";
$rezultat111 = mysql_query($upit111,$veza) or die (mysql_error());
$id_nova_kalkulacija = mysql_insert_id();  //ID ubačenog zaglavlja kalkulacije za prosljeđivanje u stavke



//dohvačanje cijena iz odabranog cijenika
$upit = "SELECT * FROM kalkulacija_import_cjenik_stavke WHERE id_cjenika = '$odabir_cjenika'";
$rezultat = mysql_query($upit) or die (mysql_error());
while($row = mysql_fetch_array($rezultat)){
  $kataloski_broj = $row["kataloski_broj"];
  $cijena_eurska = $row["cijena_EUR"];
  $valuta = $row["valuta"];
  $cijena_DD = $row["cijena_DD"];



//dohvačanje kategorija artikala
$upit5 = "SELECT * FROM kalkulacija_import_kategorija";
$rezultat5 = mysql_query($upit5) or die (mysql_error());
while($row = mysql_fetch_array($rezultat5)){
  $kat_br = $row["kataloski_broj"];
  $kategorija_artikla = $row["kategorija_artikla"];
  $grupa_proizvoda = $row["grupa_proizvoda"];
  $podgrupa_proizvoda = $row["podgrupa_proizvoda"];




}



if($kataloski_broj == $kat_br){

  $kategorija_artikla = $row["kategorija_artikla"];
  $grupa_proizvoda = $row["grupa_proizvoda"];
  $podgrupa_proizvoda = $row["podgrupa_proizvoda"];


 } else {

  $kategorija_artikla = "";
  $grupa_proizvoda = "";
  $podgrupa_proizvoda = "";


}

//////////////////////////////////////početak izračuna svih vrijednosti//////////////////////////////////////////////


//odabir valute i tečaja
if ($valuta == 'EUR') { 


$upit44 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '7' ORDER BY vrijeme DESC LIMIT 1";
$rezultat44 = mysql_query($upit44) or die (mysql_error());

 while($row = mysql_fetch_array($rezultat44)){
   $iznos = $row["iznos"]; 
  }

} else { 

 echo ""; 

}


if ($valuta == 'USD') { 


$upit55 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '8' ORDER BY vrijeme DESC LIMIT 1";
$rezultat55 = mysql_query($upit55) or die (mysql_error());

 while($row = mysql_fetch_array($rezultat55)){
   $iznos = $row["iznos"]; 
  }

} else { 

 echo ""; 

}


//odabir carinskih troškova
$upit66 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '1' ORDER BY vrijeme DESC LIMIT 1";
$rezultat66 = mysql_query($upit66) or die (mysql_error());

 while($row = mysql_fetch_array($rezultat66)){
   $carina1 = $row["iznos"]; 
  }


//odabir spediterskih troškova
$upit77 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '2' ORDER BY vrijeme DESC LIMIT 1";
$rezultat77 = mysql_query($upit77) or die (mysql_error());

 while($row = mysql_fetch_array($rezultat77)){
   $spediter1 = $row["iznos"]; 
  }


//odabir bankarskih troškova
$upit88 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '4' ORDER BY vrijeme DESC LIMIT 1";
$rezultat88 = mysql_query($upit88) or die (mysql_error());

 while($row = mysql_fetch_array($rezultat88)){
   $banka1 = $row["iznos"]; 
  }

//odabir bankarskih troškova
$upit99 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '3' ORDER BY vrijeme DESC LIMIT 1";
$rezultat99 = mysql_query($upit99) or die (mysql_error());

 while($row = mysql_fetch_array($rezultat99)){
   $transport1 = $row["iznos"]; 
  }


$cijena_KN = round(($cijena_eurska * $iznos),2);  //Nabavna EUR cijena * Tečaj
$carina = $cijena_KN - ($cijena_KN * ($carina1 / 100));
$carina_razlika = round(($cijena_KN - $carina),2);   //Carina za prikaz u retku
$spediter = $cijena_KN - ($cijena_KN * ($spediter1 / 100));
$spediter_razlika = round(($cijena_KN - $spediter),2);   //Spediter za prikaz u retku
$banka = $cijena_KN - ($cijena_KN * ($banka1 / 100));
$banka_razlika = round(($cijena_KN - $banka),2);    //Banka za prikaz u retku
$transport = $cijena_KN - ($cijena_KN * ($transport1 / 100));
$transport_razlika = round(($cijena_KN - $transport),2);    //Transport za prikaz u retku
$nabavna_cijena = round(($cijena_KN + $carina_razlika + $spediter_razlika + $banka_razlika + $transport_razlika),2);  //Nabavna cijena sa svim zavisnim troškovima


//odabir marže po cjenovnom razredu za rezervne dijelove - Drezga
if ($nabavna_cijena <= 50) {


$upit100 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '11'";
$rezultat100 = mysql_query($upit100) or die (mysql_error());
while($row = mysql_fetch_array($rezultat100)){
  $iznos_marze = $row["iznos"]; }


} else if ($nabavna_cijena > 51 && $nabavna_cijena <= 300 ) {


$upit101 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '12'";
$rezultat101 = mysql_query($upit101) or die (mysql_error());
while($row = mysql_fetch_array($rezultat101)){
  $iznos_marze = $row["iznos"]; }

} else if ($nabavna_cijena > 301 && $nabavna_cijena <= 700) {


$upit102 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '13'";
$rezultat102 = mysql_query($upit102) or die (mysql_error());
while($row = mysql_fetch_array($rezultat102)){
  $iznos_marze = $row["iznos"]; }

} else if ($nabavna_cijena > 701 && $nabavna_cijena <= 1000) {


$upit103 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '14'";
$rezultat103 = mysql_query($upit103) or die (mysql_error());
while($row = mysql_fetch_array($rezultat103)){
  $iznos_marze = $row["iznos"]; }

} else if ($nabavna_cijena > 1001) {


$upit104 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '15'";
$rezultat104 = mysql_query($upit104) or die (mysql_error());
while($row = mysql_fetch_array($rezultat104)){
  $iznos_marze = $row["iznos"]; }

} else { $iznos_marze = 45; }


$iznos_marze; //Iznos marže za prikaz po retku koliko iznosi


$drezga_zarada = $nabavna_cijena * ($iznos_marze / 100); //Iznos Drezga zarade (apsolutni)


$vpc_drezga = round(($nabavna_cijena + $drezga_zarada),2);  //VPC cijena


//Dohvaćanje PDV-a
$upit105 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '6' ORDER BY vrijeme DESC LIMIT 1";
$rezultat105 = mysql_query($upit105) or die (mysql_error());
 while($row = mysql_fetch_array($rezultat105)){
   $pdv = $row["iznos"]; }

$mpc_drezga = round($vpc_drezga + ($vpc_drezga * ($pdv / 100)),2);  //MPC cijena


//Dohvaćanje troška firme
$upit106 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '5' ORDER BY vrijeme DESC LIMIT 1";
$rezultat106 = mysql_query($upit106) or die (mysql_error());
 while($row = mysql_fetch_array($rezultat106)){
   $trosak_firme = $row["iznos"]; }


$trosak_firme_f = round($vpc_drezga * ($trosak_firme / 100),2);  ///Trošak firme


//odabir marže po cjenovnom razredu za rezervne dijelove - Dileri
if ($vpc_drezga <= 50) {


$upit107 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '11'";
$rezultat107 = mysql_query($upit107) or die (mysql_error());
while($row = mysql_fetch_array($rezultat107)){
  $iznos_marze_diler = $row["iznos"]; }


} else if ($vpc_drezga > 51 && $vpc_drezga <= 300 ) {


$upit108 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '12'";
$rezultat108 = mysql_query($upit108) or die (mysql_error());
while($row = mysql_fetch_array($rezultat108)){
  $iznos_marze_diler = $row["iznos"]; }

} else if ($vpc_drezga > 301 && $vpc_drezga <= 700) {


$upit109 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '13'";
$rezultat109 = mysql_query($upit109) or die (mysql_error());
while($row = mysql_fetch_array($rezultat109)){
  $iznos_marze_diler = $row["iznos"]; }

} else if ($vpc_drezga > 701 && $vpc_drezga <= 1000) {


$upit110 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '14'";
$rezultat110 = mysql_query($upit110) or die (mysql_error());
while($row = mysql_fetch_array($rezultat110)){
  $iznos_marze_diler = $row["iznos"]; }

} else if ($vpc_drezga > 1001) {


$upit112 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '15'";
$rezultat112 = mysql_query($upit112) or die (mysql_error());
while($row = mysql_fetch_array($rezultat112)){
  $iznos_marze_diler = $row["iznos"]; }

} else { $iznos_marze_diler = 30; }


$iznos_marze_diler;  //Marža dilera za prikaz u tablici u postotku


$preporucena_vpc = round($vpc_drezga + ($vpc_drezga * ($iznos_marze_diler / 100)),2); //Preporučena VPC cijena za tablicu
$preporucena_mpc = round($preporucena_vpc + ($preporucena_vpc * ($pdv / 100)),2);  //Preporučena MPC cijena


//Izračun zarada za dilera
$zarada_diler_kn = $preporucena_vpc - $vpc_drezga;
$zarada_diler_p = round(($zarada_diler_kn/$vpc_drezga * 100),2);


//Izračun zarade za Drezgu
$zarada_drezga_kn_brutto = $vpc_drezga - $nabavna_cijena;   //Brutto zarada za Drezgu u kn
$zarada_drezga_kn_netto = $vpc_drezga - $nabavna_cijena - $trosak_firme_f;  //Netto zarada za drezgu u kn
$zarada_drezga_p_brutto =  round((($zarada_drezga_kn_brutto/$vpc_drezga) * 100),2);///Brutto zarada za Drezgu u %
$zarada_drezga_p_netto =   round((($zarada_drezga_kn_netto/$vpc_drezga) * 100),2); ///Netto zarada za Drezgu u %


///////////////////////////////////Zavrešeno skupljanje podataka i priprema za ubacivanje u tablicu//////////////////////////////////////////


//echo "$kataloski_broj - Kataloski broj<br>";
//echo "$cijena_eurska - EUR<br>";
//echo "$iznos - TECAJ<br>";
//echo "$cijena_KN - CISTA NABAVNA<br>";
//echo "$carina_razlika - CARINA<br>";
//echo "$spediter_razlika - ŠPEDITER<br>";
//echo "$banka_razlika - BANKA<br>";
//echo "$transport_razlika - Transport<br>";
//echo "<strong>$nabavna_cijena - NABAVNA</strong><br>";
//echo "$iznos_marze - Odabrana prva u redu! Samo za probu!<br>";
//echo "$drezga_zarada - Drezga zarada<br>"; 
//echo "$vpc_drezga - VPC<br>";
//echo "$mpc_drezga - MPC<br>";
//echo "Trošak firme - ".$trosak_firme."<br>";
//echo "$trosak_firme_f - Trošak firme<br>";
//echo "$iznos_marze_diler - Diler marža<br>";
//echo "$preporucena_vpc - Preporučena VPC<br>";
//echo "$preporucena_mpc - Preporučena MPC<br>";
//echo "$zarada_diler_kn - Diler zarada u kn<br>";
//echo "$zarada_diler_p - Diler zarada u %<br>";
//echo "$zarada_drezga_kn_brutto - Drezga brutto zarada u kn <br>";
//echo "$zarada_drezga_kn_netto - Drezga neto zarada u kn <br>";
//echo "$zarada_drezga_p_brutto - Brutto zarada Drezga u %<br>";
//echo "$zarada_drezga_p_netto - Netto zarada Drezga u % <br><br><p>";


////////////////////////////////////////////////Ubacivanje podataka u bazu podatka//////////////////////////////////////////////////////////////////
//query za ubacivanje izračuna stavaka u kalkulaciju
$upit222 = "INSERT DELAYED INTO kalkulacija_stavke 
(id_kalkulacija, datum, vrijeme, kataloski_broj, kategorija_artikla, grupa_proizvoda, podgrupa_proizvoda, cijena_EUR, cijena_KN, carina, spediter, banka, transport, nabavna_cijena, drezga_marza_po_grupi, drezga_zarada, neto_VPC, neto_MPC, trosak_firme, trosak_firme_p, diler_marza_po_grupi, preporucena_VPC, preporucena_MPC, zarada_diler_kn, zarada_diler_post, zarada_za_nas_kn, zarada_za_nas_post, brutto_zarada_za_nas_kn, brutto_zarada_za_nas_post) 
VALUES 
('$id_nova_kalkulacija', '$datum', '$vrijeme', '$kataloski_broj', '$kategorija_artikla', '$grupa_proizvoda', '$podgrupa_proizvoda', '$cijena_eurska', '$cijena_KN', '$carina_razlika', '$spediter_razlika', '$banka_razlika', '$transport_razlika', '$nabavna_cijena', '$iznos_marze', '$drezga_zarada', '$vpc_drezga', '$mpc_drezga', '$trosak_firme_f', '$trosak_firme', '$iznos_marze_diler', '$preporucena_vpc', '$preporucena_mpc', '$zarada_diler_kn', '$zarada_diler_p', '$zarada_drezga_kn_netto', '$zarada_drezga_p_netto', '$zarada_drezga_kn_brutto', '$zarada_drezga_p_brutto')";
$rezultat222 = mysql_query($upit222) or die (mysql_error());


}


header("location:index_kalkulacija.php");
exit;
?>

Link to comment
Share on other sites

Probably the most common advice given in these forums is "Don't run queries inside loops, it kills performance". Use JOINs instead and loop through the results. There is not a single occurrence of the word JOIN in your script.

 

The while() loop starts on line 31 and ends on 331 (5 lines from the end). Just about everything is in a loop.

 

Many of your queries only retrieve a single row - you don't need a while loop to process those, just get the row.

 

Instead of INSERT single record in side a loop, store the values (array) and use the multiple insert syntax after the loop

 

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Edited by Barand
Link to comment
Share on other sites

Barand,

 

Can you explain me a last part of you're comment

 

Instead of INSERT single record in side a loop, store the values (array) and the multiple insert syntax after the loop


INSERT INTO [i]tbl_name[/i] (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

 

I'm haveing a problem there, Either i get error message or I get double values... I'm doing something wrong with the query...

Link to comment
Share on other sites

Example

 

/*****
* array of data so we can set up an example loop
*/
$data = array ('aaaaa','bbbbbb','ccccccc','dddddddd','eeeeeeee');

/****
* inserting in a loop
*/
foreach ($data as $item) {
   $sql = "INSERT into mytable (item) VALUES ('$item')";
   mysql_query ($sql);
}

/****
* more efficient method using single multiple insert
*/
$updates = array();
foreach ($data as $item) {
   $updates[] = "('$item')";
}
$sql = "INSERT INTO mytable (item) VALUES " . join(',', $updates);
mysql_query ($sql);

Edited by Barand
Link to comment
Share on other sites

Barand,

 

I'm really strugling with the code and I would appreciate if you could help me a little bit more... I do belive that the while loop in the begining of code is slowing me down a lot, but I don't know how to lose it. Can you help me? I did clean the code as much as I could, but I'm stuck again...

 

<?php
///////////////////////////////////////////////////////////////////////////Stvaranje zaglavlja kalkulacije//////////////////////////////////////////////////////////////////////////
//dohvačanje naziva i vrste kalkulacije za punjenje zaglavlja kalkulacije
$upit55 = "SELECT * FROM kalkulacija_import_cjenik WHERE id = '$odabir_cjenika'";
$rezultat55 = mysql_query($upit55) or die (mysql_error());
$row = mysql_fetch_array($rezultat55);
 $naziv_cjenika = $row["naziv"];
 $vrsta_cjenika = $row["vrsta"];



//Ubacivanje zaglavlja kalkulacije i prikaz ID-a te kalkulacije za povezivanje sa stavkama
$upit111 = "INSERT INTO kalkulacija (datum, vrijeme, naziv, vrsta) VALUES ('$datum','$vrijeme','$naziv_cjenika','$vrsta_cjenika')";
$rezultat111 = mysql_query($upit111,$veza) or die (mysql_error());


//ID ubačenog zaglavlja kalkulacije za prosljeđivanje u stavke
$id_nova_kalkulacija = mysql_insert_id();


/////////////////////////////////////////////////////////////////////////Završetak zaglavlja kalkulacije i početak stvaranja stavaka kalkulacije/////////////////////////////////////
//dohvačanje cijena iz odabranog cijenika
$upit = "SELECT * FROM kalkulacija_import_cjenik_stavke LEFT JOIN kalkulacija_import_kategorija ON kalkulacija_import_cjenik_stavke.kataloski_broj = kalkulacija_import_kategorija.kat_br WHERE id_cjenika = '$odabir_cjenika' LIMIT 50";
$rezultat = mysql_query($upit) or die (mysql_error());
while($row = mysql_fetch_array($rezultat)){
  $id_cjen = $row["id_cjenika"];
  $kataloski_broj = $row["kataloski_broj"];
  $cijena_eurska = $row["cijena_EUR"];
  $valuta = $row["valuta"];
  $cijena_DD = $row["cijena_DD"];
  $kat_br = $row["kat_br"];
  $kategorija_artikla = $row["kategorija_artikla"];
  $grupa_proizvoda = $row["grupa_proizvoda"];
  $podgrupa_proizvoda = $row["podgrupa_proizvoda"];



if($kataloski_broj == $kat_br){

  $kategorija_artikla = $row["kategorija_artikla"];
  $grupa_proizvoda = $row["grupa_proizvoda"];
  $podgrupa_proizvoda = $row["podgrupa_proizvoda"];


 } else {

  $kategorija_artikla = "";
  $grupa_proizvoda = "";
  $podgrupa_proizvoda = "";


}

////////////////////////////////////////////////////////////početak izračuna svih vrijednosti///////////////////////////////////////////////////////


//odabir valute i tečaja
if ($valuta == 'EUR') { 


$upit44 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '7' ORDER BY vrijeme DESC LIMIT 1";
$rezultat44 = mysql_query($upit44) or die (mysql_error());

 $row = mysql_fetch_array($rezultat44);
  $iznos = $row["iznos"]; 

} else { 

 echo "$kataloski_broj nema upisanu valutu! Upišite valutu i pokušajte ponovno!"; 

}


if ($valuta == 'USD') { 


$upit55 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '8' ORDER BY vrijeme DESC LIMIT 1";
$rezultat55 = mysql_query($upit55) or die (mysql_error());

 $row = mysql_fetch_array($rezultat55);
  $iznos = $row["iznos"]; 

} else { 

 echo "$kataloski_broj nema upisanu valutu! Upišite valutu i pokušajte ponovno!"; 

}


//odabir carinskih troškova
$upit66 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '1' ORDER BY vrijeme DESC LIMIT 1";
$rezultat66 = mysql_query($upit66) or die (mysql_error());

 $row = mysql_fetch_array($rezultat66);
  $carina1 = $row["iznos"]; 

//odabir spediterskih troškova
$upit77 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '2' ORDER BY vrijeme DESC LIMIT 1";
$rezultat77 = mysql_query($upit77) or die (mysql_error());

 $row = mysql_fetch_array($rezultat77);
  $spediter1 = $row["iznos"]; 

//odabir bankarskih troškova
$upit88 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '4' ORDER BY vrijeme DESC LIMIT 1";
$rezultat88 = mysql_query($upit88) or die (mysql_error());

 $row = mysql_fetch_array($rezultat88);
  $banka1 = $row["iznos"]; 

//odabir bankarskih troškova
$upit99 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '3' ORDER BY vrijeme DESC LIMIT 1";
$rezultat99 = mysql_query($upit99) or die (mysql_error());

 $row = mysql_fetch_array($rezultat99);
  $transport1 = $row["iznos"];


$cijena_KN = round(($cijena_eurska * $iznos),2);  //Nabavna EUR cijena * Tečaj


$carina = $cijena_KN - ($cijena_KN * ($carina1 / 100));
$carina_razlika = round(($cijena_KN - $carina),2);   //Carina za prikaz u retku


$spediter = $cijena_KN - ($cijena_KN * ($spediter1 / 100));
$spediter_razlika = round(($cijena_KN - $spediter),2);   //Spediter za prikaz u retku


$banka = $cijena_KN - ($cijena_KN * ($banka1 / 100));
$banka_razlika = round(($cijena_KN - $banka),2);    //Banka za prikaz u retku


$transport = $cijena_KN - ($cijena_KN * ($transport1 / 100));
$transport_razlika = round(($cijena_KN - $transport),2);    //Transport za prikaz u retku


$nabavna_cijena = round(($cijena_KN + $carina_razlika + $spediter_razlika + $banka_razlika + $transport_razlika),2);  //Nabavna cijena sa svim zavisnim troškovima


//odabir marže po cjenovnom razredu za rezervne dijelove - Drezga
if ($nabavna_cijena <= 50) {


$upit100 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '11' LIMIT 1";
$rezultat100 = mysql_query($upit100) or die (mysql_error());
    $row = mysql_fetch_array($rezultat100);
  $iznos_marze = $row["iznos"];


} else if ($nabavna_cijena > 51 && $nabavna_cijena <= 300 ) {


$upit101 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '12' LIMIT 1";
$rezultat101 = mysql_query($upit101) or die (mysql_error());
 $row = mysql_fetch_array($rezultat101);
  $iznos_marze = $row["iznos"];

} else if ($nabavna_cijena > 301 && $nabavna_cijena <= 700) {


$upit102 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '13' LIMIT 1";
$rezultat102 = mysql_query($upit102) or die (mysql_error());
 $row = mysql_fetch_array($rezultat102);
  $iznos_marze = $row["iznos"];

} else if ($nabavna_cijena > 701 && $nabavna_cijena <= 1000) {


$upit103 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '14' LIMIT 1";
$rezultat103 = mysql_query($upit103) or die (mysql_error());
 $row = mysql_fetch_array($rezultat103);
  $iznos_marze = $row["iznos"];

} else if ($nabavna_cijena > 1001) {


$upit104 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_drezga' AND naziv = '15' LIMIT 1";
$rezultat104 = mysql_query($upit104) or die (mysql_error());
 $row = mysql_fetch_array($rezultat104);
  $iznos_marze = $row["iznos"];

} else { $iznos_marze = 45; }


$iznos_marze; //Iznos marže za prikaz po retku koliko iznosi


$drezga_zarada = $nabavna_cijena * ($iznos_marze / 100); //Iznos Drezga zarade (apsolutni)


$vpc_drezga = round(($nabavna_cijena + $drezga_zarada),2);  //VPC cijena


//Dohvaćanje PDV-a
$upit105 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '6' ORDER BY vrijeme DESC LIMIT 1";
$rezultat105 = mysql_query($upit105) or die (mysql_error());
  $row = mysql_fetch_array($rezultat105);
   $pdv = $row["iznos"];

$mpc_drezga = round($vpc_drezga + ($vpc_drezga * ($pdv / 100)),2);  //MPC cijena


//Dohvaćanje troška firme
$upit106 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_zavisnih' AND naziv = '5' ORDER BY vrijeme DESC LIMIT 1";
$rezultat106 = mysql_query($upit106) or die (mysql_error());
 $row = mysql_fetch_array($rezultat106);
  $trosak_firme = $row["iznos"];


$trosak_firme_f = round($vpc_drezga * ($trosak_firme / 100),2);  ///Trošak firme


//odabir marže po cjenovnom razredu za rezervne dijelove - Dileri
if ($vpc_drezga <= 50) {


$upit107 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '11' LIMIT 1";
$rezultat107 = mysql_query($upit107) or die (mysql_error());
 $row = mysql_fetch_array($rezultat107);
  $iznos_marze_diler = $row["iznos"]; 


} else if ($vpc_drezga > 51 && $vpc_drezga <= 300 ) {


$upit108 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '12' LIMIT 1";
$rezultat108 = mysql_query($upit108) or die (mysql_error());
 $row = mysql_fetch_array($rezultat108);
  $iznos_marze_diler = $row["iznos"];

} else if ($vpc_drezga > 301 && $vpc_drezga <= 700) {


$upit109 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '13' LIMIT 1";
$rezultat109 = mysql_query($upit109) or die (mysql_error());
 $row = mysql_fetch_array($rezultat109);
  $iznos_marze_diler = $row["iznos"];

} else if ($vpc_drezga > 701 && $vpc_drezga <= 1000) {


$upit110 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '14' LIMIT 1";
$rezultat110 = mysql_query($upit110) or die (mysql_error());
 $row = mysql_fetch_array($rezultat110);
  $iznos_marze_diler = $row["iznos"];

} else if ($vpc_drezga > 1001) {


$upit112 = "SELECT * FROM kalkulacija_uvjeti_stavke WHERE id_uvjeti = '$odabir_marza_dileri' AND naziv = '15' LIMIT 1";
$rezultat112 = mysql_query($upit112) or die (mysql_error());
 $row = mysql_fetch_array($rezultat112);
  $iznos_marze_diler = $row["iznos"];

} else { $iznos_marze_diler = 30; }


$iznos_marze_diler;  //Marža dilera za prikaz u tablici u postotku


$preporucena_vpc = round($vpc_drezga + ($vpc_drezga * ($iznos_marze_diler / 100)),2); //Preporučena VPC cijena za tablicu
$preporucena_mpc = round($preporucena_vpc + ($preporucena_vpc * ($pdv / 100)),2);  //Preporučena MPC cijena


//Izračun zarada za dilera
$zarada_diler_kn = $preporucena_vpc - $vpc_drezga;
$zarada_diler_p = round(($zarada_diler_kn/$vpc_drezga * 100),2);


//Izračun zarade za Drezgu
$zarada_drezga_kn_brutto = $vpc_drezga - $nabavna_cijena;   //Brutto zarada za Drezgu u kn
$zarada_drezga_kn_netto = $vpc_drezga - $nabavna_cijena - $trosak_firme_f;  //Netto zarada za drezgu u kn
$zarada_drezga_p_brutto =  round((($zarada_drezga_kn_brutto/$vpc_drezga) * 100),2);///Brutto zarada za Drezgu u %
$zarada_drezga_p_netto =   round((($zarada_drezga_kn_netto/$vpc_drezga) * 100),2); ///Netto zarada za Drezgu u %


///////////////////////////////////Zavrešeno skupljanje podataka i priprema za ubacivanje u tablicu//////////////////////////////////////////


//echo "$kataloski_broj - Kataloski broj<br>";
//echo "$cijena_eurska - EUR<br>";
//echo "$iznos - TECAJ<br>";
//echo "$cijena_KN - CISTA NABAVNA<br>";
//echo "$carina_razlika - CARINA<br>";
//echo "$spediter_razlika - ŠPEDITER<br>";
//echo "$banka_razlika - BANKA<br>";
//echo "$transport_razlika - Transport<br>";
//echo "<strong>$nabavna_cijena - NABAVNA</strong><br>";
//echo "$iznos_marze - Odabrana prva u redu! Samo za probu!<br>";
//echo "$drezga_zarada - Drezga zarada<br>"; 
//echo "$vpc_drezga - VPC<br>";
//echo "$mpc_drezga - MPC<br>";
//echo "Trošak firme - ".$trosak_firme."<br>";
//echo "$trosak_firme_f - Trošak firme<br>";
//echo "$iznos_marze_diler - Diler marža<br>";
//echo "$preporucena_vpc - Preporučena VPC<br>";
//echo "$preporucena_mpc - Preporučena MPC<br>";
//echo "$zarada_diler_kn - Diler zarada u kn<br>";
//echo "$zarada_diler_p - Diler zarada u %<br>";
//echo "$zarada_drezga_kn_brutto - Drezga brutto zarada u kn <br>";
//echo "$zarada_drezga_kn_netto - Drezga neto zarada u kn <br>";
//echo "$zarada_drezga_p_brutto - Brutto zarada Drezga u %<br>";
//echo "$zarada_drezga_p_netto - Netto zarada Drezga u % <br><br><p>";


////////////////////////////////////////////////Ubacivanje podataka u bazu podatka//////////////////////////////////////////////////////////////////
//query za ubacivanje izračuna stavaka u kalkulaciju
$sql = "INSERT DELAYED INTO kalkulacija_stavke 
(id_kalkulacija, id_cjenika, datum, vrijeme, kataloski_broj, kategorija_artikla, grupa_proizvoda, podgrupa_proizvoda, cijena_EUR, cijena_KN, carina, spediter, banka, transport, nabavna_cijena, drezga_marza_po_grupi, drezga_zarada, neto_VPC, neto_MPC, trosak_firme, trosak_firme_p, diler_marza_po_grupi, preporucena_VPC, preporucena_MPC, zarada_diler_kn, zarada_diler_post, zarada_za_nas_kn, zarada_za_nas_post, brutto_zarada_za_nas_kn, brutto_zarada_za_nas_post) 
VALUES 
('$id_nova_kalkulacija', '$id_cjen', '$datum', '$vrijeme', '$kataloski_broj', '$kategorija_artikla', '$grupa_proizvoda', '$podgrupa_proizvoda', '$cijena_eurska', '$cijena_KN', '$carina_razlika', '$spediter_razlika', '$banka_razlika', '$transport_razlika', '$nabavna_cijena', '$iznos_marze', '$drezga_zarada', '$vpc_drezga', '$mpc_drezga', '$trosak_firme_f', '$trosak_firme', '$iznos_marze_diler', '$preporucena_vpc', '$preporucena_mpc', '$zarada_diler_kn', '$zarada_diler_p', '$zarada_drezga_kn_netto', '$zarada_drezga_p_netto', '$zarada_drezga_kn_brutto', '$zarada_drezga_p_brutto')";
$query = mysql_query($sql) or die (mysql_error());


}


header("location:index_kalkulacija.php");
exit;
?>

Link to comment
Share on other sites

Also have a problem with foreach part... The code below is inserting only one row. Why is not inserting everything selected?

 

$kolone = array('id_kalkulacija', 'id_cjenika', 'datum', 'vrijeme', 'kataloski_broj', 'kategorija_artikla', 'grupa_proizvoda', 'podgrupa_proizvoda', 'cijena_EUR', 'cijena_KN', 'carina', 'spediter', 'banka', 'transport', 'nabavna_cijena', 'drezga_marza_po_grupi', 'drezga_zarada', 'neto_VPC', 'neto_MPC', 'trosak_firme', 'trosak_firme_p', 'diler_marza_po_grupi', 'preporucena_VPC', 'preporucena_MPC', 'zarada_diler_kn', 'zarada_diler_post', 'zarada_za_nas_kn', 'zarada_za_nas_post', 'brutto_zarada_za_nas_kn', 'brutto_zarada_za_nas_post');
$data = array($id_nova_kalkulacija, $id_cjen, $datum, $vrijeme, $kataloski_broj, $kategorija_artikla, $grupa_proizvoda, $podgrupa_proizvoda, $cijena_eurska, $cijena_KN, $carina_razlika, $spediter_razlika, $banka_razlika, $transport_razlika, $nabavna_cijena, $iznos_marze, $drezga_zarada, $vpc_drezga, $mpc_drezga, $trosak_firme_f, $trosak_firme, $iznos_marze_diler, $preporucena_vpc, $preporucena_mpc, $zarada_diler_kn, $zarada_diler_p, $zarada_drezga_kn_netto, $zarada_drezga_p_netto, $zarada_drezga_kn_brutto, $zarada_drezga_p_brutto);
$updates = array();
foreach ($data as $item) {
       $updates[] = "('$item')";
}
$colnames = "`".implode("`, `", $kolone)."`";
$colvals = "".implode(",", $updates)."";
$sql = "INSERT INTO kalkulacija_stavke ($colnames) VALUES ($colvals)";
$query = mysql_query($sql) or die (mysql_error());

Link to comment
Share on other sites

The easiest part to improve is the UPDATE at the end of the loop

 

Instead of the UPDATE query at the end of the loop

if (!isset($kolone)) $kolone = array();
$kolone[] = "('$id_nova_kalkulacija', '$id_cjen', '$datum', '$vrijeme', '$kataloski_broj', '$kategorija_artikla', '$grupa_proizvoda', '$podgrupa_proizvoda', '$cijena_eurska', '$cijena_KN', '$carina_razlika', '$spediter_razlika', '$banka_razlika', '$transport_razlika', '$nabavna_cijena', '$iznos_marze', '$drezga_zarada', '$vpc_drezga', '$mpc_drezga', '$trosak_firme_f', '$trosak_firme', '$iznos_marze_diler', '$preporucena_vpc', '$preporucena_mpc', '$zarada_diler_kn', '$zarada_diler_p', '$zarada_drezga_kn_netto', '$zarada_drezga_p_netto', '$zarada_drezga_kn_brutto', '$zarada_drezga_p_brutto')";

 

Do the update after the loop

 

$sql = "INSERT INTO kalkulacija_stavke 
(id_kalkulacija, id_cjenika, datum, vrijeme, kataloski_broj, kategorija_artikla, grupa_proizvoda, podgrupa_proizvoda, cijena_EUR, cijena_KN, carina, spediter, banka, transport, nabavna_cijena, drezga_marza_po_grupi, drezga_zarada, neto_VPC, neto_MPC, trosak_firme, trosak_firme_p, diler_marza_po_grupi, preporucena_VPC, preporucena_MPC, zarada_diler_kn, zarada_diler_post, zarada_za_nas_kn, zarada_za_nas_post, brutto_zarada_za_nas_kn, brutto_zarada_za_nas_post) 
VALUES " . join(',', $kolone);
mysql_query($sql);

 

I can't advise on the rest of the queries without knowing how the tables are related. Some of the queries suggest to me

that you may need additional tables to resolve the conditions. I'm really working in the dark here.

Link to comment
Share on other sites

Some more things to improve

 

1. Don't use SELECT * when you only need specific columns

2. You have at least one table where you are defining a date in PHP and then using that in the INSERT query. You should instead create that date field as a timestamp with a default value of NOW(). Then you don't need to include the date field in your INSERT query at all - it will be handled automatically.

Edited by Psycho
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.