Werte aus Datenbank anzeigen
Marc2
- php
0 Volker Nebelung0 FraFu0 keine_Ahnung0 Marc2
Hallo,
ich habe ein Problem mit der Ausgabe von Daten aus meiner Datenbank.
Die Tabelle ist folgendermaßen aufgebaut:
Tabelle: createdbackups
Spalte 1: meldung
Spalte 2: timestamp
Spalte 3: customerID
Hier ein paar Beispielwerte:
meldung timestamp customerID
Erfolgreich 2007-08-13 09:51:11 15
Nicht erfolgreich 2007-08-13 10:12:11 15
Nicht erfolgreich 2007-08-13 09:00:11 35
Erfolgreich 2007-08-13 10:21:11 35
Nun möchte ich die Daten so ausgeben, das von jeder customerID immer das neuste Datum ermittelt wird, und dann zu diesem Datum die dazugehörige Meldung angezeigt wird.
Nicht erfolgreich 2007-08-13 10:12:11 15
Erfolgreich 2007-08-13 10:21:11 35
Nun habe ich es so probiert:
SELECT meldung, MAX(timestamp), customerID
FROM createdbackups
GROUP BY customerID
Es klappt auch wunderbar, bis auf eine sehr wichtige Sache. Es wird nicht die zu dem timestamp gehörige meldung angezeigt.
Ich weiß nicht mehr was ich noch probieren könnte. Ich würde mich sehr über Ideen von euch freuen.
Es klappt auch wunderbar, bis auf eine sehr wichtige Sache. Es wird nicht die zu dem timestamp gehörige meldung angezeigt.
Ich tippe mal auf folgendes: Du selektierst zwar für den timestamp durch MAX() einen eindeutigen Wert, aber für meldung werden unter Umständen mehrere Werte ausgewählt (du sagst ja nicht, welchen meldung-Wert du haben willst), darüber stolpert MySQL dann.
Grober Code:
Zuerst
SELECT MAX(timestamp) AS zeit, costumerID
FROM xyz
GROUB BY costumerID
und danach in einer zweiten Abfrage den enstprechenden Wert meldung mit
WHERE costumerID = bla AND timestamp = zeit
Gruß, Volker
Hallo!
Nun habe ich es so probiert:
SELECT meldung, MAX(timestamp), customerID
FROM createdbackups
GROUP BY customerID
Probiers mal mit einem Subselect
Select \* from createdbackups b where timestamp=(select max(timestamp) from createdbacksups WHERE timestamp=b.timestamp)
Ha bich jetzt nicht überprüft. Schau mal ob du mit dem Ansatz weiter kommst oder ob der völliger Müll ist.
mfg
frafu
SELECT meldung, timestamp, customerID
FROM createdbackups
ORDERD BY timestamp DESC
würde es das nicht auch tun?
JETZT GEHT ES! :) :)
Zwar nicht direkt wegen dem Code von euch, aber das hat mich auf jeden Fall weiter gebracht.
Diese Seite war die Lösung:
http://sql-und-xml.de/sql-praxis/detailtabelle-aggregatfunktion-einzelzeilen.html
Hier mein Code zu dem ich noch eine letzte Frage habe.
Wie ihr unten sehen könnt, habe ich unten ORDER BY D.id geschrieben. In SELECT habe ich jedoch nicht D.id "abgerufen".
Ist das OK? Oder muss D.id im SELECT stehen wenn MySQL mit ihm arbeiten soll?
Es funktioniert mit beiden Varianten, ich will jedoch einen ordentlichen Code schreiben.
SELECT D.name, D.domain, A.error, A.timestamp
FROM createdbackups AS A
INNER JOIN (
SELECT B.customerID, Max( B.timestamp ) AS 'zeit'
FROM createdbackups AS B
GROUP BY B.customerID
) AS C
INNER JOIN kunden AS D ON A.customerID = C.customerID
AND A.timestamp = C.zeit
AND A.customerID = D.id
ORDER BY D.id
Danke!