Kann MySQL rechnen?

Joe

Erfahrenes Mitglied
Kann man zb im Update-Befehl den Parameter SET rechnen lassen?

Etwa so:
PHP:
		mysql_query("UPDATE
				Tabellenname
			SET
				Menge=-$Anzahl
			Where
				X='$X' AND Y='$Y'");

Oder muss man immer erst eine Datenbankabfrage nach der "Menge" zum rechnen machen?
Also eine Datenbankabfrage um die Zahl zum rechnen zu holen dann in Variable die Rechnung schreiben und nochmal die Datenbank mit der neuen Variable befüllen?

Würde mir da gern die Abfrage sparen.
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hallo,

ja, MySQL kann rechnen. Deine Anfrage ist fast richtig, nur musst du die Menge zweimal reinschreiben:
SQL:
            UPDATE
                Tabellenname
            SET
                Menge=Menge-$Anzahl
            Where
                X='$X' AND Y='$Y';

Gruß,
BK
 
  • Gefällt mir
Reaktionen: Joe

Joe

Erfahrenes Mitglied
Hey vielen Dank. Hatte mich schon mit den X Abfragen abgefunden. Hab mich ehrlich gewundert das dies nicht so einfach möglich war.

Eigentlich ist das Thema ja abgehakt allerdings folgt daraus ne 2.e Frage. Wenn die Tabelle oder die gesuchte Zeile/Zelle noch jungfräuhlich also leer ist, fange ich das normalerweisse bei einer Abfrage mit:
if num_rows != 0
ab. Kann man eine Fehlermeldung seitens SQL bei unseren Bsp. abfangen?
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hallo,

direkt "abfangen" kannst es nicht, würde die Abfrage auf alle Fälle einmal wie oben absetzen.
Danach kannst ja mit mysql_affected_rows() abrufen, wieviele Datensätze verändert wurden. Wenn dies 0 ist, dann kannst ja dein INSERT INTO abfeuern.

Du könntest das Ganze glaub ich aber auch mit einer Abfrage machen, nur weiß ich jetzt auch nicht ob das so funktioniert. Schau dir hier am Besten mal das hier an.

@yaslaw: Deine Antworten waren auch schonmal länger ;)

Gruß
BK
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Joe

Joe

Erfahrenes Mitglied
Aha verstehe die Funktion affected_rows fängt sozusagen Fehler ab wenn es keinen Eintrag zu UPDATEn gibt. Wunderbar das spart ne Menge Zugriffe.

SQL:
  $Anzahl=5;
mysql_query("UPDATE
                    Tabellenname
                    SET
                        Menge=Menge+$Anzahl
                    Where
                        ID='$ID' ");
            if (mysql_errno()) {        
                echo mysql_errno() . ": " . mysql_error(). "\n";
            }    
if (mysql_affected_rows() == 0) {
$Anzahl=5;
mysql_query("INSERT INTO
                    Tabellenname
                        (ID,
                        MENGE)
                    VALUES
                        ('$ID','$Anzahl')");

Hab da mal nur fiktive namen genommen. Aber funktioniert einwandfrei.

Yaslaw hat die Angewohnheit mir kurz und knackig zu antworten. Hilft mir aber erstaunlicherweisse immer unheimlich weiter :)
Also Danke euche beiden.