Hallo zusammen,
ich habe bei einer MySQL-Abfrage ein Problem.
Ich setze mit JOIN/LEFT JOIN einen längeren Datensatz zusammen.
Das klappt soweit auch gut.
Allerdings sind in der Tabelle logfile (l) pro bug-id (b.id) mehrere Einträge enthalten.
Ich will aber nur den Neusten anzeigen (l.zeit).
Das klappt mit einem MAX(l.zeit) insofern ganz gut, dass für dieses Feld der maximale Wert ausgegeben wird (das Feld beinhaltet den Timestamp der letzten Änderung eines Bugs).
Jetzt kommen aber die Probleme:bei lt.name (da steht der Typ der letzten änderung drin - andere tabelle, verknüpft mit l) kommt aber NICHT der letzte Wert, sondern halt der Erste. Wie muss ich das machen, dass hier der Wert aus dem Datensatz von MAX(l.zeit) genommen wird? Müsste ich die Abfrage mit INNER JOIN machen?
Problematisch wird es natürlich auch, sobald ich mehrere Bug-IDs abfragen will. Wenn ich das MAX setze, dann bekomme ich natürlich genau nur einen Datensatz raus von einer bug.id. Aber ich hab ja in der Regel mehrere (beispielhaft in der Abfrage als IN (1,2,3) dargestellt. Ich brauche also für jede Bug-ID einen Datensatz.
Wisst ihr was ich meine? Was mach ich hier falsch?
Danke und Gruss,KlyX
ich habe bei einer MySQL-Abfrage ein Problem.
Ich setze mit JOIN/LEFT JOIN einen längeren Datensatz zusammen.
Das klappt soweit auch gut.
Allerdings sind in der Tabelle logfile (l) pro bug-id (b.id) mehrere Einträge enthalten.
Ich will aber nur den Neusten anzeigen (l.zeit).
Das klappt mit einem MAX(l.zeit) insofern ganz gut, dass für dieses Feld der maximale Wert ausgegeben wird (das Feld beinhaltet den Timestamp der letzten Änderung eines Bugs).
Jetzt kommen aber die Probleme:bei lt.name (da steht der Typ der letzten änderung drin - andere tabelle, verknüpft mit l) kommt aber NICHT der letzte Wert, sondern halt der Erste. Wie muss ich das machen, dass hier der Wert aus dem Datensatz von MAX(l.zeit) genommen wird? Müsste ich die Abfrage mit INNER JOIN machen?
Problematisch wird es natürlich auch, sobald ich mehrere Bug-IDs abfragen will. Wenn ich das MAX setze, dann bekomme ich natürlich genau nur einen Datensatz raus von einer bug.id. Aber ich hab ja in der Regel mehrere (beispielhaft in der Abfrage als IN (1,2,3) dargestellt. Ich brauche also für jede Bug-ID einen Datensatz.
Wisst ihr was ich meine? Was mach ich hier falsch?
SQL-Abfrage
- 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, 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 (1,2,3) ORDER by l.zeit DESC"
Chris' Weblog - Mein Blog rund um Vieles