… weil Bananen keine Äpfel sind!

Temporäre Tabellen mit MySQL oder: Differenz zwischen zwei Zeilen

Juli 30th, 2012 Friedemann

Für ein kleines Projekt (bald davon mehr) habe ich nach einem Weg gesucht, die Differenz (oder auch „Delta“) innerhalb einer Tabelle zwischen zwei aufeinanderfolgenden Zeilen zu bilden. Da das Ganze natürlich auch mit PHP funktionieren soll, musste ich ein bisschen herum probieren, bis ich auf die folgende Lösung gestoßen bin: Temporäre Tabellen. Temporäre Tabellen werden wie „normale“ MySQL-Tabellen behandelt, existieren allerdings nur so lange im Speicher, wie der Client – also in diesem Fall das PHP-Script – mit dem Server verbunden ist. Eine tolle Sache! Das Anlegen der temporären Tabelle war für diesen speziellen Zweck mit der folgenden Syntax zu bewerkstelligen:

1
2
3
4
5
CREATE temporary TABLE IF NOT EXISTS `tmptbl`
SELECT `id` + 1 AS prev,
`e-total`
FROM `tab1`
ORDER BY `id`;

!!Hierbei ist in der Tabelle `tab1` die `id` der Schlüssel und Auto-Increment-Wert. Ich kann bei meinem Script davon ausgehen, dass die IDs fortlaufend sind und nicht gelöscht werden würden!!
Die Differenz konnte nun mit dem folgenden Query gebildet werden:

1
2
3
4
5
6
SELECT DISTINCT `id`,
( tab1.`e-total` - tmptbl.`e-total` ) AS delta,
FROM `tab1`
INNER JOIN `tmptbl`
ON ( tab1.`id` = tmptbl.`prev` )
ORDER BY tab1.`id`;

Bei mir funktioniert diese Abfrage wunderbar.

p.s.: Gelöscht werden kann die temporäre Tabelle übrigens – wie sollte es auch anders sein – ganz einfach:

1
drop temporary table if exists `tmptbl`

Leave a Reply