Hallo!
Ich habe mir ein kleines Redaktionssystem gebastelt, das wie folgt funktioniert: Es gibt eine Tabelle in der die Seiten gespeichert werden.
table mt_seiten
|-----------|...
| ID | NAME | ...
|-----------|...
...
Weiters gibt es eine Tabelle mit Versionen des eigentlichen Inhaltes
rt_versionen
|-------------------------------------
| ID | SEITEN_ID | INHALT | PUBLTIME
...
Die Spalte PUBLTIME sagt aus, ab wann diese Version gültig ist. Das bis wann ergibt sich von selbst. Entweder ohne Ende oder bis zur nächsten PUBLTIME einer Version zur selben Seite.
SEITEN_ID ist natürlich der Pointer auf mt_seiten
Wenn die Seite mit der ID=x ausgeliefert wird lautet der SQL-Query:
SELECT * from rt_versionen LEFT JOIN mt_seiten ON mt_seiten.ID = rt_versionen.SEITEN_ID WHERE mt_seiten.ID = x && rt_versionen.PUBLTIME < NOW() ORDER BY PUBLTIME LIMIT 1;
Mehr brauchte ich bis jetzt nicht. Ich muss das System aber jetzt ausbauen und muss jetzt mehrere Seiten auf einmal lesen, weil ich sie gesammelt auf einer anderen Seite darstellen muss.
Sagen wir ich brauche die Seiten mit den IDs 4,10,18 und 24. Mein Problem ist jetzt:
Ich kann natürlich nicht wie oben nach PUBLTIME sortieren und nur das erste Ergebnis nehmen.
Natürlich könnte ich es in einer Schleife lösen und 4 einzelne Abfragen jeweils wie oben machen.
Wäre aber nicht eine reine SQL-Lösung schöner. Außerdem geht es da in einem Fällen um eine ganze Menge Seiten. Wäre also nicht sehr effizient.
Ich komme aber die ganze Zeit auf keine Lösung. Dachte eine Weile an Subqueries mit mySQL. Aber in der Subquery müsste ja dann eine Art rückbezüglicher Teil sein? Außerdem geht es nicht. Ich hab nur mySQL 4.0 und nicht 4.1 zu Verfügung.
Habt ihr Hinweise oder Tipps, die mich auf die richtige Fährte bringen könnten?