Sortierte ausgabe von gruppen

hallo an alle,

hab da mal wieder ein interesantes problemchen und bin mit meiner lösung nicht ganz zufrieden :frowning:

erstmal kurz worums geht; ich möchte mehrere textblöcke laden allerdings soll nur die aktuellste version ausgegeben werden.

hier mal meine lösung (bin mir allerdings nicht sicher ob mySQL immer den ersten DS nimmt):

SELECT * FROM (
SELECT * FROM blocks
WHERE block_id IN (‚a‘,‚b‘,‚c‘)
ORDER BY version DESC
) B
GROUP BY block_id

bsp:
block a gibt es in 2 versionen, block b in einer und c garnicht.
also möchte ich in der ausgabe block a version 2 und block b version 1 haben.

having und weiteres grupieren hat leider nicht funktioniert, da bei mir immer der erste gefundene DS angezeigt wurde :frowning:

hat einer von euch evtl. eine idee wie das problem elegant (und sicher) zu lösen ist?

lg Stefan

Hi!

Vertausche mal das Group und das Order by …

Grüße,
Tomh

danke für die schnelle antwort :smile:

aber leider funktioniert das nicht :frowning:

musste genau aus diesem grund 2 mal selecten. das erste select brauch ich zum (um-) sortieren der daten, beim 2. funktioniert das grupieren (bei mir) dann wie gewünscht.

wenn ich erst grupiere, dann bekomme ich die daten vom ersten DS und nicht vom aktuellsten bzw. dem mit der höhsten version.

allersings bin ich mir nicht sicher, ob es wirklich eine „funktion“ ist oder zufällig klappt

having und weiteres grupieren hat leider nicht funktioniert,
da bei mir immer der erste gefundene DS angezeigt wurde :frowning:

ein order by kommt in der ausführung immer nach dem group by, da ändert es gar nichts, in welcher reihenfolge das im sql vorkommt.

hat einer von euch evtl. eine idee wie das problem elegant
(und sicher) zu lösen ist?

ich hatte dasselbe problem auch schon mehrmals. im „schlimmsten“ fall musst du es mit einem subselect lösen. bei meiner aktuellen datenstruktur habe ich das hauptelement in einer eigenen tabelle und die versionen in einer relationstabelle, und in der haupttabelle speichere ich einfach die aktuelle version in einem extra feld. das ist zwar genau genommen überflüssig, aber erspart halt sehr viel arbeit sowohl für mich als auch die datenbank.

danke auch für den tipp :smile:

zZ. benutz ich ja den schlimmsten fall :wink:
aber eine extra tabelle (block_id,version) scheint mir die beste (vorallem sicherste) lösung zu sein. macht auch das einfügen einer neuen version ‚leichter‘

danke nochmal an alle