Hallo zusammen,
ich habe ein kleines Problem bei einer MySQL-Abfrage.
Kurzer Hintergrund: die Abfrage holt aus bestehenden Tabellen Daten raus. Die Tabellen sind alle mit JOIN verknüpft. Es gibt eine einzige LEFT JOIN -Verknüpfung, weil der Eintrag in der ursprünglichen Tabelle leer sein kann.
Mein Problem liegt bei den Werten l.zeit und lt.name.
l.zeit holt aus einem Logfile den Timestamp der letzten Änderung - diese wiederum wird anhand der Bug-ID ermittelt. In der Logfile-Tabelle sind also in der Regel etliche Einträge zu einer Bug-ID enthalten. Mit meiner Abfrage habe ich dann erstmal pro Bug-ID mehrere Einträge erhalten. Nachdem ich nur den zeitlich letzten Eintrag will, habe ich das Ganze anhand der bug-ID ge"GROUP"t und auf das l.zeit ein Max gesetzt. Klappt erstmal super: in l.zeit steht für jede Bug-ID nur der höchste Wert (=letzte änderung)
aaaaber: die Ausgabe von lt.name scheint nun aber von dem Max nicht betroffen zu sein und zeigt etwas ganz anderes an als den zu l.zeit zugehörigen Datensatz.. Als wären die beiden Werte komplett unabhängig voneinander.
Aber ich möchte ja bei l.zeit den zugehörigen Eintrag lt.name erhalten.
ich fürchte, ich hab hier irgendwo einen Fehler mit den JOINS gemacht.
Kann mir da wer helfen?
Das wäre nett, danke
KlyX
ich habe ein kleines Problem bei einer MySQL-Abfrage.
Kurzer Hintergrund: die Abfrage holt aus bestehenden Tabellen Daten raus. Die Tabellen sind alle mit JOIN verknüpft. Es gibt eine einzige LEFT JOIN -Verknüpfung, weil der Eintrag in der ursprünglichen Tabelle leer sein kann.
Mein Problem liegt bei den Werten l.zeit und lt.name.
l.zeit holt aus einem Logfile den Timestamp der letzten Änderung - diese wiederum wird anhand der Bug-ID ermittelt. In der Logfile-Tabelle sind also in der Regel etliche Einträge zu einer Bug-ID enthalten. Mit meiner Abfrage habe ich dann erstmal pro Bug-ID mehrere Einträge erhalten. Nachdem ich nur den zeitlich letzten Eintrag will, habe ich das Ganze anhand der bug-ID ge"GROUP"t und auf das l.zeit ein Max gesetzt. Klappt erstmal super: in l.zeit steht für jede Bug-ID nur der höchste Wert (=letzte änderung)
aaaaber: die Ausgabe von lt.name scheint nun aber von dem Max nicht betroffen zu sein und zeigt etwas ganz anderes an als den zu l.zeit zugehörigen Datensatz.. Als wären die beiden Werte komplett unabhängig voneinander.
Aber ich möchte ja bei l.zeit den zugehörigen Eintrag lt.name erhalten.
ich fürchte, ich hab hier irgendwo einen Fehler mit den JOINS gemacht.
Kann mir da wer helfen?
Das wäre nett, danke
PHP-Code:
SELECT b.id, b.erstelltDatum, b.ueberschrift, b.faellig, f.name AS firma, bt.name AS bugtype, m.name AS mitarbeiter, bs.name AS status, ma.name AS abteilung, b.erledigtDatum, MAX(l.zeit) AS letzte_aenderung, lt.name AS aenderungstyp
FROM bug b
JOIN firmen f ON f.ID = b.firmenID
JOIN bug_typ bt ON bt.id = b.typID
JOIN mitarbeiter m ON m.id = b.zugewiesenMitarbeiterID
JOIN bug_status bs ON bs.id = b.statusID
JOIN logfile l ON l.linkID = b.ID
JOIN logfile_typ lt ON lt.ID = l.logfileTypID
LEFT JOIN mitarbeiter_abteilung ma ON ma.id = b.zugewiesenAbteilungID
WHERE b.id IN (140632,272020) GROUP by b.id;
Kommentar