Zum Inhalt springen

SELECT mit GROUP BY, aber nur neuesten Datensatz ausgeben!


Empfohlene Beiträge

Geschrieben

Hallo Leute,

ich steh vor nem Problem das ich bisher - auch mit Hilfe von anderen Foren - noch nicht elegant lösen konnte.

Es geht darum, dass User in einer WebEingabemaste Einträge verfassen können, und diese auch immer eine Art "Zugehörigkeits-Nummer" bekommen (keine ID der DB, sondern mehr so eine Sortiernummer).

Wenn ein Eintrag mit einer Nummer gemacht wird, die schon besteht, so wird der bestehende Beitrag nicht gelöscht, sondern ein neuer Angelegt und in Ausgabe (Tabellarisch) kommen dann nur die Einträge zur Nummer, die das aktuellste Datum haben.

Zu allen Beitägen, die einer Nummer zugehören, gelangt man dann über einen Link.

Nun mein Problem ist, dass ich zwar über GROUP BY die Nummern gruppieren kann und über MAX(datum) das zugehörige aktuelle Datum bekomme aber dann nicht den zum aktuellsten Datum zugehörigen Beitrag (also alle sonstigen Felder). Selbst die wildesten Sortierungen (ASC und DESC) haben nicht geholfen!


SELECT `ifc_content`.`1` , max( `ifc_content`.`2` ) , `ifc_content`.`3` , `ifc_content`.`4` , `ifc_content`.`5` , `ifc_content`.`73` , `ifc_content`.`74` , `ifc_content`.`77` , `ifc_content`.`78` , `ifc_content`.`79` , `ifc_content`.`85` , `ifc_content`.`86` , `ifc_content`.`87` , dat_user.u_unumber, dat_group.g_groupname, 

DATE_FORMAT( max( `ifc_content`.`2` ) , '%d.%m.%Y %H:%i:%s' ) AS datum_f

FROM `ifc_content` , `dat_user` , `dat_group` 

WHERE `ifc_content`.`1` = `dat_user`.`u_id` 

AND `ifc_content`.`4` = `dat_group`.`g_id` 

GROUP BY `ifc_content`.`3` DESC 

ORDER BY `1` ASC 

Da die Spalten quasi dynamisch angelegt sind haben sie keine Namen sondern Nummern... die Nummern sind die IDs von angelegten Datensätzen in einer anderen Tabelle, die dann die Spalteninhalte (Name, Typ, ...) beschreiben.

2 ist Datum und 1 ist Autor, 3 ist die interne Nummer, nach der gruppiert werden soll...

vielleicht hat ja jemand eine Idee?!

Meine Idee ist es vielleicht noch, eine extra Spalte anzulegen die "mod" heisst, und immer wenn ein neuer Eintrag gemacht wird, wird in dem bestehenden Eintrag das "mod" auf 1 gesetzt.

Dann muss ich nur noch nach "mod = 0" suchen? was haltet ihr davon?

Grüße Flo

Geschrieben

Es ist jetzt zwar schwer das anchzuvollziehen, aber du hast order by 1 und nicht by 2.

Wenn du nach dem Datum absteigend sortierst, dann kriegst du das Aktuellste.

Dann noch "Limit 1" hinten dran hängen und du hast genau einen Datensatz.

Aber vielleicht hab ichs jetzt auch bloß nicht verstanden, dann entschuldige mich bitte.

Geschrieben

Hi...

zum ORDER BY geb ich dir recht, es funktioniert aber auch so nicht, weil das GROUP By "stärker" ist...

LIMIT bringt nix, weil ich ja alle Datensätze haben will, davon aber nur die mit den aktuellsten Daten.

Habs jetzt über das "flag" gelöst, teste also auf den "mod", wenn das 0 ist ist ein aktueller Eintrag, wenn 1 dann ein alter für die History

Danke trotzdem... wenn jemand ne gute Lösung hat würds mich trotzdem interessieren :P

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...