|
Posted by "Richard Lynch" on 06/17/05 00:54
Is they any way you could combine the UPDATE queries?
I suspect not, but those are the ones that are probably what will get
worse and worse over time as the file/db grows.
All the left outer joins are not gonna help either, but that's only a few
hundred rows, right?... But will it grow?
Finally, if "nice -19" isn't supported on Windows (I suspect not) a simple
"sleep" call (see below) could give the rest of the system a chance to do
useful work.
On Thu, June 16, 2005 3:28 am, Gustav Wiberg said:
> <?php
> //This script was updated 2005-06-16
> //by Gustav Wiberg / gustav@varupiraten.se
> //Please visit www.varupiraten.se
> //
> require("phpfunctions/dbsafety.php");
>
> //Parameters that sets the rules for importing
> //
> static $fileName = "import/GNTprisfil.txt";
> static $logFileName = "logfiles/gnt.txt";
> static $limitSteps = 25;
> static $saldoColumn = 6;
> static $artNrColumn = 2;
> static $priceColumn = 5;
> static $row = 1;
> static $updateActions = 0;
> static $deleteActions = 0;
> static $checkLev = "gn-";
>
> //Function for creating a logfile
> //and writing to screen
> //
> function writeNow($str, $logFileName) {
>
> //Create a handle for writing (appending)
> //
> $logHandle = fopen($logFileName,"a");
>
> fwrite($logHandle, "$str\r\n");
> echo $str . "<br>";
>
> //Close file for writing to logfile
> //
> fclose($logHandle);
>
> }
> //Set limitstart for first time
> //
> if (!isset($limitStart)) {$limitStart = 0;}
>
> if (isset($_REQUEST["updateActions"])) {$updateActions =
> $_REQUEST["updateActions"];}
> if (isset($_REQUEST["deleteActions"])) {$deleteActions =
> $_REQUEST["deleteActions"];}
> if (isset($_REQUEST["startTime"])) {$startTime = $_REQUEST["startTime"];}
>
> if ($_REQUEST["limitstart"]) {
> $limitStart = $_REQUEST["limitstart"];
> }
>
>
> require ("phpfunctions/opendb.php");
>
>
> $sql = "SELECT COUNT(IDVara) cn FROM tbvara WHERE Varunamn LIKE
> '$checkLev%'";
> $querys = mysql_query($sql);
>
> //Count products in db
> //
> if ($limitStart == 0) {
>
> $dbArray = mysql_fetch_array($querys);
> $nrOfProducts = $dbArray["cn"];
> echo "Antal produkter: $nrOfProducts";
>
> //Create logfile or delete all content from current logfile
> //
> $logHandle = fopen($logFileName,"wb");
> fclose($logHandle);
>
>
> //Get starttime of script
> //
> $startTime = time();
> }
>
> else {
>
> $nrOfProducts = $_REQUEST["nrofproducts"];
>
> }
>
> if ($limitStart > $nrOfProducts) {
> $nrSeconds = time() - $startTime;
> $nrMinutes = $nrSeconds / 60;
> ?>
> <b>Klar</b> med uppdatering av saldo och ev. borttagningar för
> <b>GNT</b>.<br><br>
> <b>Tid för uppdatering:</b> <?php echo $nrSeconds;?> sekunder eller
> <?php echo $nrMinutes;?> minuter<br><br>
> <b>Antal uppdateringar:</b> <?php echo $updateActions;?><br>
> <b>Antal produkter som ej visas efter uppdatering: </b> <?php echo
> $deleteActions;?><br>
> <a
> href="captech_checksaldo_step2.php?deleteActions=0&updateActions=0">Kolla
> captech produkter</a>
> <?php
> exit;
> }
>
> //Check if the filename exists first!
> //If not, then exit script
>
> if (!file_exists($fileName)) {
>
> echo "Filen $fileName finns inte!<br>Avslutar scriptet nu!";
> exit;
>
> }
>
>
>
>
> //Go through database with products from GNT
> //
> $sql = "SELECT tbvara.IDVara, tbvara.Saldo, tbvara.startPris,
> tbvara.Varunamn, tbvara.synligVara, tbvara.lastPris,
> tbunderkategori.marginalProcent, tbunderkategori.Underkategori FROM
> tbvara";
> $sql .= " LEFT JOIN tbunderkategorivara ON (tbvara.IDVara =
> tbunderkategorivara.ForIDVara)";
> $sql .= " LEFT JOIN tbunderkategori ON
> (tbunderkategori.IDUnderKategori
> = tbunderkategorivara.ForIDUnderKategori)";
> $sql .= " WHERE Varunamn LIKE '$checkLev%' AND
> tbunderkategori.marginalProcent>-1 AND tbunderkategori.Underkategori<>'Ej
> tilldelade' ORDER BY IDVara LIMIT $limitStart,$limitSteps";
> //echo $sql;
> //exit;
> $querys = mysql_query($sql);
>
> while ($toarray = mysql_fetch_array($querys)) {
>
> //Get current row from db
> //
> $idproduct = $toarray["IDVara"];
> $dbSaldo = $toarray["Saldo"];
> $dbArtNr = $toarray["Varunamn"];
> $dbPris = $toarray["startPris"];
> $dbSynligVara = $toarray["synligVara"];
> $dbLastPris = $toarray["lastPris"];
> $dbMarginalProcent = $toarray["marginalProcent"];
> $dbUnderKategori = $toarray["Underkategori"];
>
> //Taken from table tbunderkategori
> //
> $marginalProcent = intval($dbMarginalProcent);
>
> //Delete $checkLev from string $dbArtNr for the sake of
> comparing
> //(take away the three first characters)
> //
> $dbArtNr = substr($dbArtNr, 3);
>
>
> //Go through whole textfile and compare with current row in db
> //
> $handle = fopen($fileName, "r");
>
>
>
> $foundProduct= false;
> ob_start();
>
> while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
>
> $textSaldo = $data[$saldoColumn];
> $textArtNr = $data[$artNrColumn];
> $textPris = $data[$priceColumn];
>
>
> //Default marginal is 15 when marginal isn't set for
> undercategory
> //
> if (intval($marginalProcent) == 0) {
>
> $marginalProcent = 15;
>
> }
>
> //echo "Marginal för underkategori $dbUnderKategori är
> $marginalProcent%<br>";
>
> //Set price based on price from textfile + marginal set
> //for undercategory
> //
> $newPrice = $textPris + (($textPris *
> ($marginalProcent/100)));
> $newPrice = round($newPrice,0);
>
>
> if (isset($textArtNr) AND isset($textSaldo) AND $row>1) {
>
>
> //If there is an occurence of article-nr for product
> in
> textfile
> //that matches the one in current row in database...
> //
> if ($textArtNr == $dbArtNr) {
>
> $foundProduct= true;
>
> //If saldo for product isn't the same for product
> in
> textfile,
> //OR price for product isn't' the same for product
> in textfile
> //THEN do something...
> //
> if (strtolower($textSaldo) != strtolower($dbSaldo)
> OR strtolower($newPrice) != strtolower($dbPris) OR $dbSynligVara == 'N') {
>
>
> $sql2 = "UPDATE tbvara";
> $sql2 .= " SET Saldo=" .
> safeQuote($textSaldo);
>
> //Update price only if newPrice is over zero
> //newPrice IS zero when marginalProcent is set
> to zero based on marginalProcent
> //from tbunderkategori
> //Price from vendor must also be higher than
> zero
> //If price is locked (lastPris), then don't
> update specific price
> //
> if ($dbLastPris == 'N') {
>
> if (intval($newPrice) > 0 AND
> intval($textPris) > 0) {
>
> $sql2 .= ", startPris=" .
> safeQuote($newPrice);
>
> }
>
> }
>
> $sql2 .= ", synligVara=" . safeQuote('Y');
> $sql2 .= " WHERE IDVara=" .
> safeQuote($idproduct) . " LIMIT 1";
> $querys2 = mysql_query($sql2);
> $writeTo = "Produkt: $dbArtNr";
> writeNow($writeTo, $logFileName);
>
> $writeTo = "marginalpåslag i %:
> $marginalProcent
> (Underkategori: $dbUnderKategori)";
> writeNow($writeTo, $logFileName);
>
> if ($dbSaldo != $textSaldo) {
> $writeTo = "Föregående saldo: $dbSaldo har
> ändrats till: $textSaldo";
> writeNow($writeTo, $logFileName);
> }
>
> if ($dbPris != $newPrice) {
> $writeTo = "Föregående pris = $dbPris har
> ändrats till: $newPrice";
> writeNow($writeTo, $logFileName);
> }
>
> $writeTo = "Ändring fungerade bra:";
> writeNow($writeTo, $logFileName);
>
> $wrongSQL = mysql_error();
>
> //No errors when sql query was executed
> //
> if (strlen($wrongSQL)==0) {
> $updateActions++;
> $writeTo = "Ja";
> writeNow($writeTo, $logFileName);
>
> }
> else {
> //Error when sql-query was executed
> //
> $writeTo = "Nej - fel $wrongSQL";
> writeNow($writeTo, $logFileName);
> }
>
> $writeTo =
> "-------------------------------------------------";
> writeNow($writeTo, $logFileName);
>
>
>
> }
> //echo "<b>YES</b>! $sql2";
>
> }
>
> }
>
>
> $row++;
>
sleep(1); //Give the cpu a chance to do something else for a second.
> }
> //End of textfile
> ob_flush();
>
>
> fclose($handle);
>
> if ($foundProduct == false AND $dbSynligVara == 'Y') {
>
> $sql2 = "UPDATE tbvara SET synligVara=" . safeQuote('N') . "
> WHERE IDVara=" . safeQuote($idproduct) . " LIMIT 1";
> //echo $sql2;
> $querys2 = mysql_query($sql2);
> $deleteActions++;
>
> }
>
>
> }
> //END Go through database with products from GNT
>
>
>
>
>
>
> mysql_close();
> //Increase limitstart to begin after current limitSteps
> //
> $limitStart = $limitStart + $limitSteps + 1;
>
>
> ?>
> <script language="Javascript">
> window.location = 'gnt_checksaldo_step2.php?limitstart=<?php echo
> $limitStart;?>&nrofproducts=<?php echo
> $nrOfProducts;?>&deleteActions=<?php
> echo $deleteActions;?>&updateActions=<?php echo
> $updateActions;?>&startTime=<?php echo $startTime;?>';
> </script>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--
Like Music?
http://l-i-e.com/artists.htm
Navigation:
[Reply to this message]
|