Totaal optellen in php

Status
Niet open voor verdere reacties.

Ruultje

Gebruiker
Lid geworden
16 okt 2007
Berichten
39
Ik kom er niet goed uit. Ik haal gegevens uit een database. Vervolgens wordt er via de query gerekend. Maar sommigen zaken dienen ook vanuit de php code berekend te worden. Zo worden er resultaten per dienst bekeken. Waarin zaken met elkaar opgeteld worden (grotendeels worden dit procenten). Nu worden de resultaten weergegeven per week. Het lukt mij om de resultaten per dag weer te geven (dus per berekening) nu krijg ik het in php echter niet voor elkaar om alles bij elkaar te tellen.Dus het aantal uren van die week.
Ik heb onderstaande code, maar die berekend maar één tijd. Dus niet de overige tijden (in totaal 15, 15 verschillende tijden) van die week.

Code:
$i = array($totaletijd);
$uitkomst = array_sum($i);
echo $uitkomst;

Het moet dus allemaal afkomen van $totaletijd.

Of is dit alleen mogelijk via MySQL? Ik zit hier nu namelijk behoorlijk mee vast.
 
Je zult ons toch iets meer informatie moeten geven. Maak anders eens wat screenshots van de tabellen in de database en vertel ons wat er opgeteld moet worden.
 
Je zult ons toch iets meer informatie moeten geven. Maak anders eens wat screenshots van de tabellen in de database en vertel ons wat er opgeteld moet worden.

Het gaat om een report over een productie. Hierin moeten de geproduceerde kilo's, de gelopen uren van de machine etc. vermeld worden. De producten worden op een rol gemaakt. Elk nieuw product heeft dan een eigen rolnummer. Hiervan moet het beginnummer van de rol opgeschreven worden en het eindnummer van die rol (en van die productie, dus een dienst). Het product heeft zelf een vast aantal kilo's. Die kilo's van dat product worden vermenigvuldigd met het aantal geproduceerde rollen (eindnummer - beginnummer). Dit samen zijn de aantal geproduceerde kilo's. Eventueel kan er ook scrap worden gemaakt. Deze scrap moet opgeteld worden bij de totaal geproduceerde kilo's. Dit is dan weer samen het totaal geproduceerde. Dit aantal moet dan gedeeld worden door het aantal uren dat de dienst (machine) gedraaid heeft. Normaal gesproken door 8. Om te kijken wat er per uur is geproduceerd.

Ook moet er worden gekeken hoeveel scrap er geproduceerd is en hoeveel kg product. Dit moet aangegeven worden in procenten.

Verder wordt er gekeken naar het aantal uren dat de machine gedraaid heeft. Dit moeten normaal gesproken 8 uur per dienst zijn. Maar kan ook minder zijn. Ook dit moet in procenten worden omgezet. Dus wanneer de machine 8 uur heeft gedraaid is het 100%. Bij 6 uur bijvoorbeeld 75%.

Voor het aantal geproduceerde kilo's moeten dan de resultaten (aantal kilo's) per week worden geteld. Ook het aantal kilo's scrap per week moeten bij elkaar geteld worden. Daarbij moeten dan ook de kilo's per week komen waarin de aantal geproduceerde kilo's + het aantal kilo scrap van die week. En daarnaast dan ook de kilo's per uur over de hele week. De procenten van de geproduceerde kilo's + geproduceerde scrap moeten ook over die week berekend worden. Hetzelfde geldt dan weer voor de gelopen uren.

Ik hoop dat het zo een beetje duidelijk is.

Code:
Hieronder het script (een gedeelte). 
    $res = mysql_query("SELECT *, (`einduur` - `beginuur`) AS `aantal_uren`, (`eindkilo` - `beginkilo`) AS `kg_totaal`, SUM(`kilo`) AS `kilos`, (`rolnummer_eind` - `rolnummer_begin`) AS `rolnummers`, MONTH(datum) AS maand, DAYOFMONTH(datum) AS dag FROM diensten LEFT JOIN producten ON diensten.product_id = producten.itemcode LEFT JOIN
		scrap_verbruik
	ON
		scrap_verbruik.id = diensten.dienst_id
WHERE WEEK(datum, 1) = '$week' AND YEAR(datum) = '$year' AND machine = '$machine'
GROUP BY dienst_id") or die("res2:". mysql_error());
    
    
    $aantal_cols = 3;     
    $huidige_col = 0;    
    
    $num = mysql_num_rows($res2); 
        
    if ($num > 0){
                
        while ($row = mysql_fetch_assoc($res)){
            
            if( $huidige_col == 0){
				echo "<table class='reporttotal'>";
				echo "<tr>";
				echo "<td>";
				echo "<div class='reporting'>Line ". $row['machine'] ." &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ".$row['dag'] ."-".$maanden[$row['maand']] ."";
				echo "</div></td></tr>";
                echo "<tr>";
				echo "<td>";
                echo "<div class='leftside'>";
				echo "<font class='intro'>&nbsp;</font><br>";
				echo "<font class='intro'>Performance</font><br>";
				echo "<font class='intro'>Producttype</font><br>";
				echo "<font class='product'>Product 1</font><font class='intro1'>Rollweight (kg)</font><br>";
                echo "<font class='intro'>Rolls per shift</font><br>";
				echo "<font class='intro'>Geproduceerd (kg)</font><br>";
				echo "<font class='intro'>Scrap (kg)</font><br>";
				echo "<font class='intro'>Totaal geproduceerd (kg)</font><br>";
				echo "<font class='intro'>Resultaten per uur</font><br>";
				echo "<font class='intro'>Scrap (kg)</font><br>";
				echo "<font class='intro'>Totaal geproduceerd (kg)</font><br>";
				echo "<font class='intro'>Verbruik(%)</font><br>";
				echo "<font class='intro'>Scrap %</font><br>";";
				echo "<font class='intro'>Beginuur dienst</font><br>";
				echo "<font class='intro'>Einduur dienst</font><br>";
				echo "<font class='intro'>Totaal gelopen (uren)</font><br>";
				echo "<font class='intro'>Overige uren</font><br>";
				echo "<font class='intro'>Totale tijd</font><br>";
				echo "<font class='intro'>Gelopen uren %</font><br>";
                echo "</div></td>";
    
            }
                
                echo "<td>";
                echo "<div class='rightside'>";
                echo "<font class='texting'>".$diensten[$row['dienst']] ."</font><br>";
				
				echo "<font class='texting'>". $row['product_id'] ."</font><br>";
				 echo "<font class='texting'>". $row["kilo_product"] ."</font><br>";
				echo "<font class='texting'>". $row["rolnummers"] ."</font><br>";
				$processedkg = $row['kilo_product'] * $row['rolnummers'];
				echo "<font class='texting'>". number_format($geprodkg,2) ."</font><br>";
			
				echo "<font class='texting'>". $row["kilos"] ."</font><br>";
				$geprodtotalkg = $geproddkg + $row['kilos'];
				echo "<font class='texting'>". number_format($geprodtotalkg,2) ."</font><br>";
				$gemaakteuren = $geprodtotalkg / $row['aantal_uren'];
				echo "<font class='texting'>". number_format($gemaakteuren,2) ."</font><br>";
				echo "<font class='texting'>". number_format($row["kilos"],2) ."</font><br>";
				echo "<font class='texting'>". number_format($geprodtotalkg,2) ."</font><br>";
				$scrapprocent =  $row['kilos'] / $geprodtotalkg * 100;
				$yieldprocent =  100 - $scrapprocent;
				echo "<font class='texting'>". round($yieldprocent) ."%</font><br>";
				echo "<font class='texting'>". round($scrapprocent) ." %</font><br>";
				
				echo "<font class='texting'>" .$row['einduur'] ."</font><br>";
				echo "<font class='texting'>" .$row['beginuur'] ."</font><br>";
				echo "<font class='texting'>" .$row['aantal_uren'] ."</font><br>";
				$startup = 8 - $row['aantal_uren'];
				echo "<font class='texting'>$startup</font><br>";
				$totaltime = $row['aantal_uren'] + $startup;
				echo "<font class='texting'>$totaltime</font><br>";
				$totalprocent = $row['aantal_uren'] / 8 * 100;
				echo "<font class='texting'>$totalprocent %</font><br>";
                echo "</div></td>";
                
                $huidige_col++;
            
            if ($huidige_col == $aantal_cols){
                echo "</tr></table><br><br>";


    
                $huidige_col = 0;
            }
			
        }
    }

Daaronder moeten dus de totale aantallen komen.
 
Laatst bewerkt:
Dit is hopelijk niet voor een productie-omgeving? Het is sowieso slecht beveiligd, daarnaast is MySQL niet goed geconfigureerd. Mathematisch gezien klopt je query niet, je vergeet namelijk al je kolommen te benoemen in de GROUP BY. Zorg eerst dat MySQL-instellingen goed zijn, hier mee bijvoorbeeld:

SET SESSION sql_mode = 'TRADITIONAL,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO';

Dan krijg je in ieder geval zinnige foutmeldingen uit je query.
 
Dit is hopelijk niet voor een productie-omgeving? Het is sowieso slecht beveiligd, daarnaast is MySQL niet goed geconfigureerd. Mathematisch gezien klopt je query niet, je vergeet namelijk al je kolommen te benoemen in de GROUP BY. Zorg eerst dat MySQL-instellingen goed zijn, hier mee bijvoorbeeld:

SET SESSION sql_mode = 'TRADITIONAL,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO';

Dan krijg je in ieder geval zinnige foutmeldingen uit je query.

Ik ben zelf eigenlijk aan het leren en probeer van diverse zaken iets uit. Waaronder ik dus nu iets probeerde met productie.

Qua veiligheid moet er in ieder geval nog voldoende gebeuren.
Naar de MySQL instellingen zal ik dan ook eens gaan kijken.

Berekenen heb ik nu opgelost door gewoon via de database te werken. Wel door meerdere queries.

Bedankt voor de tip hierin.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan