Hallo,
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;
^ Hier bekommst Du aber den kleinsten (ältesten) Wert für PUBLTIME. Ist das so gewollt?
Bitte ersetze den * durch die Spaltenbezeichner, die Du _wirklich_ benötigst.
Sagen wir ich brauche die Seiten mit den IDs 4,10,18 und 24.
SELECT mt_seiten.ID, mt_seiten.NAME, tr_versionen.INHALT, rt_versionen.PUBLTIME
FROM rt_versionen LEFT JOIN mt_seiten ON mt_seiten.ID = rt_versionen.SEITEN_ID
WHERE (mt_seiten.ID = 4 OR mt_seiten.ID = 10 OR mt_seiten.ID = 18 OR mt_seiten.ID = 24) AND rt_versionen.PUBLTIME < NOW() ORDER BY mt_seiten.ID, rt_versionen.PUBLTIME;
oder
SELECT mt_seiten.ID, mt_seiten.NAME, tr_versionen.INHALT, rt_versionen.PUBLTIME
FROM rt_versionen LEFT JOIN mt_seiten ON mt_seiten.ID = rt_versionen.SEITEN_ID
WHERE mt_seiten.ID IN (4,19,18,24) AND rt_versionen.PUBLTIME < NOW() ORDER BY mt_seiten.ID, rt_versionen.PUBLTIME;
ergibt ein Resultset mit den gewünschten mt_seiten.IDs, deren rt_versionen.PUBLTIME vor jetzt liegt. Dieses ist aufsteigend sortiert nach mt_seiten.ID und innerhalb der mt_seiten.ID nach PUBLTIME. Dadurch steht der älteste Eintrag je mt_seiten.ID immer am Anfang der jeweiligen mt_seiten.ID. Etwa so:
mt_seiten.ID rt_versionen.PUBLTIME
4 21.12.2004
4 05.01.2005
19 10.12.2004
19 15.12.2004
19 01.01.2005
...
Mit Hilfe einer Programmiersprache kannst Du nun dieses Resultset entsprechend auswerten.
viele Grüße
Axel