Grundlagen: Rechnen mit MySQL

Bei den ganzen Codenschnipseln und Tutorials im Internet fäll auf, dass viele MySQL nur zum sturen eintragen, updaten und auslesen von Daten nutzen. Der ganze technische Aufwand wird von PHP erledigt. Und das, obwohl man zum Beispiel Rechenoperationen viel bequemer mit MySQL abwickeln kann.

Es kommt oft vor, dass man das Ergebnis einer Spalte mit einer Rechnung updaten will. Viele tun es sich dann an, dass sie vorher mit SELECT auslesen was in der Spalte steht, den Wert in einer Variabel speichern, und diesen dann beim Updaten verwenden:

<?php
$query = mysql_query('SELECT summe FROM tabelle WHERE id=386');
$result = mysql_fetch_object($query);
mysql_query('UPDATE tabelle SET summe='.($result->summe+815).' WHERE id=386');
?>

Tatsächlich is es aber unnötig das so zumachen, weil MySQL das selbst kann! Man kann einfach Rechenoperationen mit einer Spalte machen:

UPDATE tabelle SET summe=summe+815 WHERE id=386

Aber nicht nur das, man kann sogar mit zwei Spalten rechnen, ohne zu wissen was drin steht:

UPDATE tabelle SET summe=summe+anderespalte WHERE id=386

Das Ganze funktioniert mit Minus (-), Plus (+), Durch (/) und Mal (*). Darüber hinaus hat MySQL aber auch noch komplexe mathematische Funktionen wie Pi, Cosinus, Sinus und dergleichen.

Lässt man die Datenbank mehr machen, spart man sich nicht nur PHP-Quelltext sondern auch Performance. Zum einen, weil man weniger mysql_query absetzen muss, zum anderen, weil die Datenbank das schneller erleligt.

Kommentare

unkie
unkie am Donnerstag, 24. Mai 2007 um 14:18

auch wenn es nichts zu besondere ist, gefällt mir es doch gut :) danke für die kurzen infos

blackfeet
blackfeet am Samstag, 26. Mai 2007 um 14:57

Für solche einfache Operationen ist das durchaus geeignet. Der Query, den du mir gestern gezeigt hast in dem SIN, COS, uvm. vorkam ist meiner Meinung nach mit Vorsicht zu genießen. Werden solche Queries zu oft ausgeführt, ist das in meinen Augen zu heftig für die Datenbank und man sollte die Last doch lieber einem Script aufbürden.

Markus René Einicher
Markus René Einicher am Samstag, 26. Mai 2007 um 17:29

Ja die last von dem Query den ich dir gezeigt hab der wird auf ein ganzes Cluster aufgeteilt.

Thomas
Thomas am Freitag, 6. Juli 2012 um 15:27

Kann man auch das Minuszeichen (-) oder Pluszeichen (+) aus einem Datenbankfeld abfragen?

Ich hab schon folgendes probiert, was aber leider nicht funktioniert.

SELECT sum(`Feld_A` `prefix` `Feld_B`) as total FROM ...

Dabei enthalten Feld_A und Feld_B Zahlen und prefix + oder -

Gibt es da vielleicht eine andere Schreibweise um das prefix als Anweisung zu kennzeichnen?

Danke