ik ben aan het proberen mijn verschillende MySQL query's
te combineren.
Nu de query zelf is geen probleem, maar hoe steek ik de resultaten
in een $variable in PHP?
De query
<?php
$sql= "SELECT SUM( tijd ) AS tijd, SUM( night ) AS night, SUM( sat ) AS sat, SUM( sun ) AS sun, SUM( lunch ) AS lunch FROM roster2013 WHERE naam = '$foo' AND maand ='$maand'";
$sql2 = mysql_query($sql) or die(mysql_error());
?>
voorheen maakte ik voor elke SUM een aparte query waar ik dan de waarde in een variable stak
<?php
$query = "SELECT SUM(tijd)FROM roster2013 WHERE naam = '$foo' AND maand ='$maand'";
$tijd = mysql_query($query) or die(mysql_error());
$tijd2 = mysql_fetch_assoc($tijd);
$tijd3 = $tijd2['SUM(tijd)'];
?>
en dit dan x aantal keer.
Nu moet dit echter toch veel makkelijker kunnen dacht ik, maar de oplossing ontbreekt
me...
In je query is het verstandig om
a) af en toe eens op enter te drukken voor de leesbaarheid, zodat het geen query van 1 meter breed wordt;
b) een andere naam te kiezen voor een alias dan denaam van een kolom, om te voorkomen dat jij of je database niet meer weet of Night nu de naam van de kolom of de sommatie is
SELECT
SUM(night) as totaalnachten,
SUM(sun) as totaalsuns
FROM TABEL
@ Ivo P: thanks voor de tips heb het inderdaad een beetje "opgekuist"
Nu wil ik echter nog een stapje verder gaan.
Het vorige stukje code ging erover om per maand een ovezichtje
te krijgen van gewerkte uren met opslitsing op weekdag/zaterdag/zondag enz...
Ik heb ook een volledig overzicht op 1 pagina wat op dit moment in
ongeveer 96 query's zit...
Wat ik doe is per persoon 12 query's draaien:
<?php
query1 = "SELECT SUM(tijd+night+sun)FROM roster2014 WHERE naam = 'MVH' AND start BETWEEN '2014-01-01 00:00' AND '2014-01-31 23:59'";
$mvh11 = mysql_query($query1) or die(mysql_error());
$mvh12 = mysql_fetch_assoc($mvh11);
$mvh13 = $mvh12['SUM(tijd+night+sun)'];
?>
dit dus x 12 voor elke maand en nog eens x 10 voor elke persoon...
Hoe zou ik dit kunnen vereenvoudigen?
Uiteindelijk krijg je via echo's een overzicht te zien
in tabelvorm per persoon / per maand.
thanks alvast,
Yannick
[size=xsmall]Toevoeging op 26/12/2013 12:04:12:[/size]
@ Ivo P: thanks voor de tips heb het inderdaad een beetje "opgekuist"
Nu wil ik echter nog een stapje verder gaan.
Het vorige stukje code ging erover om per maand een ovezichtje
te krijgen van gewerkte uren met opslitsing op weekdag/zaterdag/zondag enz...
Ik heb ook een volledig overzicht op 1 pagina wat op dit moment in
ongeveer 96 query's zit...
Wat ik doe is per persoon 12 query's draaien:
<?php
query1 = "SELECT SUM(tijd+night+sun)FROM roster2014 WHERE naam = 'MVH' AND start BETWEEN '2014-01-01 00:00' AND '2014-01-31 23:59'";
$mvh11 = mysql_query($query1) or die(mysql_error());
$mvh12 = mysql_fetch_assoc($mvh11);
$mvh13 = $mvh12['SUM(tijd+night+sun)'];
?>
dit dus x 12 voor elke maand en nog eens x 10 voor elke persoon...
Hoe zou ik dit kunnen vereenvoudigen?
Uiteindelijk krijg je via echo's een overzicht te zien
in tabelvorm per persoon / per maand.
thanks alvast,
Yannick
Ps deze query's zijn nog niet opgekuist...
SELECT SUM(tijd + night + sun) totaaltijd,
naam,
YEAR(start) jaar,
MONTH(start) maand
FROM roster2014
WHERE YEAR(start) = 2014
GROUP BY naam,
jaar,
maand
ORDER BY
naam ASC,
jaar ASC,
maand ASC
[size=xsmall]Toevoeging op 26/12/2013 12:11:47:[/size]
ps: roster2014 doet vermoeden dat jij elk jaar een nieuwe tabel maakt? Niet handig, want er komt een dag dat jij een keer "de afgelopen 18 maanden" of "de laatste 5 jaar" nodig hebt.
Overigens:
als start datum+tijd bevat, dan hoef je waarschijnlijk niet op te geven dat het "night" is, aangezien dat volgt uit "23:00", net als "sun" wat ook uit de datum volgt (los van feestdagen)
thanks dit werkt prima, hoe zit het dan verder met de PHP dan?
Nu moet hij echter de juiste rij selecteren met de juiste maand,
hoe krijg ik dan in een variabele bv de sum van persoon x voor maand y?
Inderdaad ik gebruik elk jaar nieuwe tabel, naarmate ik meer kennis vergaar
oa dankzij dit forum kan ik inderdaad gaan naar 1 tabel.
In de vorige werkte ik met text in de dbase, nu gebruik ik de datetime...
Wat de night betreft dit moet er als extra wel nog bij want alles wat nachturen
wordt nog eens apart opgeslagen omdat die dubbel tellen... Idem met sun (zondaguren)
// pak rij voor rij
while($row = mysql_fetch_assoc($result))
{
// dump de inhoud van de associatieve array $row compleet op het scherm
print_r($row);
}
voor de eerste regel:
$mvhOT1 = overuren van persoon MVH voor maand 1
$mvh11 = de sum uit de tabel
$jan = het aantal te werken uren in january
$prevmvh = het aantal over te dragen uren van 2013
dit wordt dan doorgetrokken naar februari, maart, enz...
en dit lukt natuurlijk niet met een print_r...
nee maar als je het resultaat van die print_r eens op het forum plaatst (of een knipsel ervan) dan krijgen wij misschien wat beter inzicht om jouw te helpen.
Overigens, moet je je niet eens gaan verdiepen in array's?
print_r geeft een dump van de beschikbare informatie.
Daar moet je dan zelf je verhaal mee bouwen.
Je zult nu steeds iets terugkrijgen met
"een naam", "een jaartal", "een maand" en "aantaluren".
Ik denk dat je om te beginnen moet gaan loslaten dat je voor elke persoon een serie eigen variabelen gaat maken. Dat is misschien werkbaar met 2 of 3 werknemers, maar je verzandt (zeker met die onleesbare afkortingen) al snel in een hele brij code die niet meer aanpasbaar is als je over 18 maanden een nieuwe medewerker moet opnemen.
Gebruik dan liever array's.
(ik snap sowieso de betekenis al sniet van "$mvh73", alleen dan dat mogelijk de 7e maand van het 3e jaar na 2010 is van medewerker mvh?)
Gebruik begrijpelijke namen (ook handig voor je opvolger over 3 jaar die niet meer weet wie "mvh" was, omdat die 2 jaar eerder al ontslag nam)
@ Ivo P:
Inderdaad dat is mijn bedoeling, het is alleen niet zo makkelijk als ik dacht
voor mezelf...
Ik begrijp wat je bedoelt met de onbegrijpbare afkortingen, deze zijn echter
een heel stuk duidelijk moest ik hier de hele pagina code even kopieren maar die is met al die
query een kleine 4000 regels...
Heb al een eerste stap gezet naar arrays maar moet me er duidelijk meer in verdiepen!
Thanks Frank Nietbelangrijk voor de youtube video!