UPDATE en SET
Ik wil een veld (Totaal) in mijn database updaten met een cijfer dat middels een formulier gepost wordt. De waarde hiervan is bijv $_POST["stem"];
Nu moet deze waarde opgeteld worden bij de oude waarde van dit veld. Moet ik nu eerst de oude waarde uitlezen en dan bij de nieuwe waarde optellen en vervolgens weer in de database zetten of kan dit in 1 keer???
$query="UPDATE tabel SET Totaal=oude + niewe waarde"?????
Dank,
F.
Ik haal altijd eerst met een query de huidige waarde er uit. daar tel ik dan met php de volgende waarde bij op en dan gebruik ik een update query om de waarde in de database te zetten.
Die 10 en 'id = 1' zul je zelf nog even aan moeten passen.
Echter, dat je je database op deze manier wilt updaten, doet me vermoeden dat je datamodel niet helemaal klopt. Je slaat nu namelijk het resultaat van een berekening op (het totaal van het aantal stemmen) en dat doe je normaal gesproken niet in een database. Je slaat alle gegevens afzonderlijk op, en pas bij het uitlezen laat je de database gegevens berekenen...
Het kan gewoon in 1 keer:
Edit:
En Blanche heeft wel gelijk voor wat betreft dat je een berekende waarde niet op moet slaan, maar ik heb het vermoeden dat hij er met zijn idee een beetje naast zit, want je zet niet de ingevulde waarde elke keer in de tabel, maar alleen maar de totaalwaarde voor elk id.
Als je wel alle keren de ingevulde waarde ook opslaat in je database dan is het datamodel inderdaad verkeerd!
En Blanche heeft wel gelijk voor wat betreft dat je een berekende waarde niet op moet slaan, maar ik heb het vermoeden dat hij er met zijn idee een beetje naast zit, want je zet niet de ingevulde waarde elke keer in de tabel, maar alleen maar de totaalwaarde voor elk id.
Als je wel alle keren de ingevulde waarde ook opslaat in je database dan is het datamodel inderdaad verkeerd!
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Quote:
Ook dan is je datamodel niet juist en dit zal op den duur leiden tot corrupte data. Je hoort gewoon alleen verschillende waardes apart op te slaan en alleen bij het uitlezen van de data het totaal te berekenen...want je zet niet de ingevulde waarde elke keer in de tabel, maar alleen maar de totaalwaarde voor elk id.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Blanche schreef op 08.01.2007 16:25:
@Robert: dat zei ik toch. En bij jou mis je de WHERE clause nog, tenzij je natuurlijk wilt dat de hele kolom geupdate wordt...
Dat zei je inderdaad, maar dat was nog niet daar toen ik begon met posten :P
En ik heb de WHERE er nog niet in gezet, omdat die er in de post van de TS ook nog niet in zat. Ik dacht dat die dat zelf wel zou snappen/ weten. Ik weet het zelf iig wel, ga hier al langer mee dan vandaag he :P
Blanche schreef op 08.01.2007 16:25:
Ook dan is je datamodel niet juist en dit zal op den duur leiden tot corrupte data. Je hoort gewoon alleen verschillende waardes apart op te slaan en alleen bij het uitlezen van de data het totaal te berekenen...
Ligt er helemaal aan waarvoor het is bedoeld!
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Groet en prettige avond,
Frank
Groet en prettige avond,
Frank
Frank schreef op 08.01.2007 17:34:
Als apart record in een aparte tabel...Als er per id 10000 stemmen worden uitgebracht, hoe zou je die allemaal moeten oplaan?
Quote:
Heb je misschien een voorbeeldje? Het enige logische geval waar je in mijn ogen de uitkomst van een berekening (wat dit in principe ook is) zou opslaan, is bijvoorbeeld bij facturen. Als bijvoorbeeld prijswijzigingen de totaalprijs van een factuur zouden beïnvloeden.Ligt er helemaal aan waarvoor het is bedoeld!
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
[
if(isset($_POST["oordeel"]))
{
$update="UPDATE wijnen SET totaal=totaal+'".$_POST['oordeel']."', stemmen=stemmen+1 WHERE id='".$_POST["rid"]."'";
mysql_query($update);
echo $update;
}
]
Ik ben het namelijk niet eens met zijn bewering dat een datamodel juist is, als je telkens alleen het totaal van een bepaald gegeven op slaat. Dit doe je in mijn ogen maar in 1 geval namelijk als het totaal niet meer mag veranderen, maar dus niet als het totaal steeds varieert...
Ik snap precies hoe je het nu in elkaar hebt zitten, en ik geloof ik ook graag dat het werkt. Ik geef alleen aan dat het m.i. niet de juiste manier is om het in dit geval zo op te lossen.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit