Lily: Bestimmten Wert aus Datenbank auslesen

Hi,

ich habe ein Problem mit dem Auslesen von Daten bei dem ich absolut nicht mehr weiter weiß.

Bei der Abfrage werden zwei Tabellen miteinander verbunden.

Einmal die Tabelle kunden in der Daten über den Kunden drinstehen und eine Tabelle createdbackups, in der die Backups drinstehen die von dem Kunden Webspace Erfolgreich/Nicht erfolgreich gemacht wurden.

Nun habe ich also folgenden Code geschrieben:

SELECT k.id, k.name, k.domain, UNIX_TIMESTAMP(MAX(c.timestamp)) AS 'timestamp' FROM kunden k INNER JOIN createdbackups c ON k.id = c.customerID GROUP BY k.id ORDER BY 1 ASC

Das Problem bei dem ich nun nicht weiter komme ist folgendes:

Die Tabelle kunden beinhaltet nur eine Zeile über den jeweiligen Kunden. Die Tabelle creadtedbackups allerdings hat mehrere Zeilen über den jeweiligen Kunden, da ja mehere Backups mit verschiedenen Zeiten vorliegen.

Nun will ich von diesen ganzen Zeilen mit den Backups immer nur das Datum (timestamp) angezeigt bekommen, das am neusten ist. Dies hat auch wunderbar mit MAX() funktioniert. Nun will ich aber ebenfalls von der Tabelle createdbackups zu dem jeweiligen maximalen timestamp die error Meldung angezeigt bekommen, die zu diesem Datum gehört.

Dies habe ich so probiert:
SELECT k.id, k.name, k.domain, UNIX_TIMESTAMP(MAX(c.timestamp)) AS 'timestamp', c.error WHERE c.timestamp=MAX(c.timestamp) FROM kunden k INNER JOIN createdbackups c ON k.id = c.customerID GROUP BY k.id ORDER BY 1 ASC

Leider funktioniert es gar nicht. Es kommt in MySQL immer diese Fehlermeldung:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE c.timestamp = MAX( c.timestamp ) FROM kunden k INNER JOIN createdbackups c' at line 1

Habt ihr eine Idee wie ich dieses Problem lösen kann? Ich hoffe sehr,  das mir jemand helfen kann.

Grüße und einen schönen Sonntag!

  1. echo $begrüßung;

    SELECT k.id, k.name, k.domain, UNIX_TIMESTAMP(MAX(c.timestamp)) AS 'timestamp', c.error WHERE c.timestamp=MAX(c.timestamp) FROM kunden k INNER JOIN createdbackups c ON k.id = c.customerID GROUP BY k.id ORDER BY 1 ASC

    Leider funktioniert es gar nicht. Es kommt in MySQL immer diese Fehlermeldung:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE c.timestamp = MAX( c.timestamp ) FROM kunden k INNER JOIN createdbackups c' at line 1

    Du musst die Reihenfolge der Klauseln beachten. Wenn du das getan hast bekommst du einen weiteren Fehler, weil Aggregatfunktionen nicht in eine WHERE-Klausel gehören. Sie können unter HAVING platziert werden. Und dann bekommst du nicht c.error von MAX(c.timestamp) sondern ein beliebiges. Alle anderen DBMS lassen bei Verwendung von GROUP By nur die Spalten im SELECT zu, über die auch gruppiert wurde. Hinzu kommen Aggregatfunktionen über die nicht direkt angegebenene Spalten. MySQL lässt auch nicht gruppierte Spalten zu, warnt aber im Handbuch vor unvorhersehbaren Ergebnissen. Den Maximalwert in einer Unterabfrage zu ermitteln sollte hier die Lösung sein. Vielleicht hilft auch schon ein HAVING MAX(c.timestamp) = c.timestamp.

    echo "$verabschiedung $name";