UPDATE en SET

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Frank

Frank

08/01/2007 16:11:00
Quote Anchor link
Goedemiddag, ik heb de volgende vraag:

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.
 
PHP hulp

PHP hulp

17/11/2024 04:51:07
 
Gerben G

Gerben G

08/01/2007 16:17:00
Quote Anchor link
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.
 
Joren de Wit

Joren de Wit

08/01/2007 16:18:00
Quote Anchor link
Ja dat kan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
UPDATE tabel
SET stem = stem + 10
WHERE id = 1


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...
 
Robert Deiman

Robert Deiman

08/01/2007 16:21:00
Quote Anchor link
@Beiden

Het kan gewoon in 1 keer:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$query = "UPDATE tabel SET Totaal = Totaal + ".intval($_POST['stem'];


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!
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
 
Joren de Wit

Joren de Wit

08/01/2007 16:25:00
Quote Anchor link
@Robert: dat zei ik toch. En bij jou mis je de WHERE clause nog, tenzij je natuurlijk wilt dat de hele kolom geupdate wordt...

Quote:
want je zet niet de ingevulde waarde elke keer in de tabel, maar alleen maar de totaalwaarde voor elk id.
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...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Robert Deiman

Robert Deiman

08/01/2007 16:30:00
Quote Anchor link
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
 
Frank

Frank

08/01/2007 17:34:00
Quote Anchor link
Mensen, bedankt!! Inmiddels is het gelukt. Ik sla idd alleen de totaalwaarde voor ieder id op. Als er per id 10000 stemmen worden uitgebracht, hoe zou je die allemaal moeten oplaan? Er moest idd nog WHERE id=x achteraan.

Groet en prettige avond,
Frank
 
Frank

Frank

08/01/2007 17:34:00
Quote Anchor link
Mensen, bedankt!! Inmiddels is het gelukt. Ik sla idd alleen de totaalwaarde voor ieder id op. Als er per id 10000 stemmen worden uitgebracht, hoe zou je die allemaal moeten oplaan? Er moest idd nog WHERE id=x achteraan.

Groet en prettige avond,
Frank
 
Joren de Wit

Joren de Wit

08/01/2007 17:46:00
Quote Anchor link
Frank schreef op 08.01.2007 17:34:
Als er per id 10000 stemmen worden uitgebracht, hoe zou je die allemaal moeten oplaan?
Als apart record in een aparte tabel...

Quote:
Ligt er helemaal aan waarvoor het is bedoeld!
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.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Frank

Frank

09/01/2007 14:06:00
Quote Anchor link
Hallo Blanche, dit is het voorbeeldjë:

[

if(isset($_POST["oordeel"]))
{

$update="UPDATE wijnen SET totaal=totaal+'".$_POST['oordeel']."', stemmen=stemmen+1 WHERE id='".$_POST["rid"]."'";

mysql_query($update);
echo $update;

}

]
 
Joren de Wit

Joren de Wit

09/01/2007 14:21:00
Quote Anchor link
Ik doelde eigenlijk op een voorbeeldje van de kant van Robert.

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.