budimir Posted February 15, 2013 Share Posted February 15, 2013 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; ?> Quote Link to comment Share on other sites More sharing options...
Barand Posted February 15, 2013 Share Posted February 15, 2013 (edited) 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 February 15, 2013 by Barand Quote Link to comment Share on other sites More sharing options...
budimir Posted February 15, 2013 Author Share Posted February 15, 2013 Thanks, Barand! I'll try to use you're advice and adjust the code. Appreciate the help. Quote Link to comment Share on other sites More sharing options...
budimir Posted February 15, 2013 Author Share Posted February 15, 2013 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... Quote Link to comment Share on other sites More sharing options...
Barand Posted February 15, 2013 Share Posted February 15, 2013 (edited) 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 February 15, 2013 by Barand Quote Link to comment Share on other sites More sharing options...
budimir Posted February 15, 2013 Author Share Posted February 15, 2013 Thanks, Barand! I'll give it a try and come to you... Quote Link to comment Share on other sites More sharing options...
budimir Posted February 17, 2013 Author Share Posted February 17, 2013 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; ?> Quote Link to comment Share on other sites More sharing options...
budimir Posted February 17, 2013 Author Share Posted February 17, 2013 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()); Quote Link to comment Share on other sites More sharing options...
Barand Posted February 17, 2013 Share Posted February 17, 2013 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. Quote Link to comment Share on other sites More sharing options...
budimir Posted February 18, 2013 Author Share Posted February 18, 2013 Barand, Thanks for the help, I have managed to clean up the code to run a bit faster. Now it is satisfying. Thanks for the help! I will mark this as solved. Quote Link to comment Share on other sites More sharing options...
Psycho Posted February 18, 2013 Share Posted February 18, 2013 (edited) 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 February 18, 2013 by Psycho Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.