Vraagje mbt update query
De bedoeling is dat kolom contract+overwerk-nietbeschikbaar-ziek = kolom beschikbaar.
Standaard staat ingesteld dat de waarde van beschikbaar op 0 staat.
Mijn query ziet er nu als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$sql = @mysql_query("SELECT voorraadid, sum(contract+overwerk-nietbeschikbaar-ziek) as beschikbaar FROM personeelsvoorraad GROUP BY init, datum");
if (!$sql) {
exit ('<p>select query mislukt</p>');
}
while ($result = mysql_fetch_array($sql)){
$voorraadid = htmlspecialchars($result['voorraadid']);
$beschikbaar = htmlspecialchars($result['beschikbaar']);
}
$sql2 = @mysql_query("UPDATE into personeelsvoorraad SET
beschikbaar = '$beschikbaar'
WHERE voorraadid = '$voorraadid'");
if (!$sql2) {
exit ('<p>insert query mislukt</p>');
}
?>
$sql = @mysql_query("SELECT voorraadid, sum(contract+overwerk-nietbeschikbaar-ziek) as beschikbaar FROM personeelsvoorraad GROUP BY init, datum");
if (!$sql) {
exit ('<p>select query mislukt</p>');
}
while ($result = mysql_fetch_array($sql)){
$voorraadid = htmlspecialchars($result['voorraadid']);
$beschikbaar = htmlspecialchars($result['beschikbaar']);
}
$sql2 = @mysql_query("UPDATE into personeelsvoorraad SET
beschikbaar = '$beschikbaar'
WHERE voorraadid = '$voorraadid'");
if (!$sql2) {
exit ('<p>insert query mislukt</p>');
}
?>
Mijn gedachte daarbij is dat 'voorraadid' het unieke nummer is en dat 'beschikbaar' verandert. De update query is dus iets in de trend van 'update beschikbaar where voorraadid = geselecteerde waarde.
Mijn vraag is nu, kan dat zomaar? Klopt mijn gedachte, of moet je bij de select query alle kolommen opvragen om vervolgens bij de update query ervoor te kiezen om alle kolommen weer up te daten. Dit lijkt mij persoonlijk een beetje krom omdat je zo dingen zit up te daten die eigenlijk niet veranderen. Ook belast het 'alle kolommen updaten' de server wat meer.
Gewijzigd op 16/01/2006 12:24:00 door Wouter
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$sql = @mysql_query("SELECT VoorraadID, sum(Contract+Overwerk-Nietbeschikbaar-Ziek) as beschikbaar FROM personeelsvoorraad GROUP BY Init, Datum");
if (!$sql) {
exit ('<p>select query mislukt</p>');
}
while ($result = mysql_fetch_array($sql)){
$voorraadid = htmlspecialchars($result['VoorraadID']);
$beschikbaar = htmlspecialchars($result['beschikbaar']);
}
$sql2 = @mysql_query("UPDATE into personeelsvoorraad SET
Beschikbaar = '$beschikbaar'
WHERE VoorraadID = '$voorraadid'");
if (!$sql2) {
exit ('<p>insert query mislukt</p>');
}
?>
$sql = @mysql_query("SELECT VoorraadID, sum(Contract+Overwerk-Nietbeschikbaar-Ziek) as beschikbaar FROM personeelsvoorraad GROUP BY Init, Datum");
if (!$sql) {
exit ('<p>select query mislukt</p>');
}
while ($result = mysql_fetch_array($sql)){
$voorraadid = htmlspecialchars($result['VoorraadID']);
$beschikbaar = htmlspecialchars($result['beschikbaar']);
}
$sql2 = @mysql_query("UPDATE into personeelsvoorraad SET
Beschikbaar = '$beschikbaar'
WHERE VoorraadID = '$voorraadid'");
if (!$sql2) {
exit ('<p>insert query mislukt</p>');
}
?>
UPDATE personeelsvoorraad
SET beschikbaar = contract + overwerk - nietbeschikbaar - ziek
Maar je komt wel weer met een mooie oplossing :) Deze kan je volgens mij gebruiken om alle records in 1 keer te doorlopen, zonder elke keer een selectiequery uit te moeten voeren.
Gewijzigd op 16/01/2006 12:32:00 door Robert Deiman
Wouter:
Dan hoef je 'beschikbaar' dus niet op te slaan! Het is een afgeleide van de overige gegevens, het zou dus dubbelop zijn wanneer je dit ook nog een keer gaat opslaan.contract+overwerk-nietbeschikbaar-ziek = kolom beschikbaar.
Met de volgende voorbeeld-query krijg je de beschikbare uren:
SELECT
(contract+overwerk-nietbeschikbaar-ziek) AS 'beschikbaar'
FROM
tabelnaam
Edit: Even de juiste kolomnamen ingevuld
Gewijzigd op 16/01/2006 12:36:00 door Frank -
Ik zal eens testen of hij werkt, ik verwacht van wel.
Frank:
Dan hoef je 'beschikbaar' dus niet op te slaan! Het is een afgeleide van de overige gegevens, het zou dus dubbelop zijn wanneer je dit ook nog een keer gaat opslaan.
Met de volgende voorbeeld-query krijg je de beschikbare uren:
SELECT
(contract+overwerk-nietbeschikbaar-ziek) AS 'beschikbaar'
FROM
tabelnaam
Edit: Even de juiste kolomnamen ingevuld
Met de volgende voorbeeld-query krijg je de beschikbare uren:
SELECT
(contract+overwerk-nietbeschikbaar-ziek) AS 'beschikbaar'
FROM
tabelnaam
Edit: Even de juiste kolomnamen ingevuld
Het is wel gemakkelijk om te doen, zoals je ziet gaat het ook op datum, en men zal uiteindelijk ook de totale beschikbaarheid willen weten. Dat kan ook wel zonder die kolom, maar als je hem hebt, is het heel gemakkelijk op te halen.
Op zich heb je wel gelijk hoor, afgeleide gegevens hoef je niet op te nemen in je database, maar soms kan het wel handig zijn.
@ De rest: dat voorbeeld van mij werkt.
Robert:
Op zich heb je wel gelijk hoor, afgeleide gegevens hoef je niet op te nemen in je database, maar soms kan het wel handig zijn.
Ja, bijvoorbeeld bij een database waarin je werkt met artikelen die van prijs kunnen veranderen. Dan moet je dingen als een totaalbedrag wel kopieren, anders klopt je historische bestand na een prijswijziging niet meer.
Daar waar het historie betreft, zie voorbeeld van Jan maar denk ook aan facturen, daar sla je gegevens dubbel op. Waarom? Deze kunnen niet meer veranderen. Hoeveel prijswijzigingen je ook doorvoert, de reeds verzonden facturen veranderen daar echt niet van.
@Jan: Bedankt voor de tip dat alles een stuk gemakkelijker kan (mijn eerste reactie was ook 'jee, wist ik dat maar eerder')
@derest: bedankt voor jullie reacties. Ik gebruik de gegevens in de kolom beschikbaar voor verscheidene overzichten, het is dan lastig en vervelend om de hele tijd sum(contract+overwerk-nietbeschikbaar-ziek) as totaal te doen.
SUM heb je overigens niet nodig, een database kan ook rekenen met + en -.