Ilja: SQl-Abfrage vereinfachen

Beitrag lesen

yo,

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;

der LEFT JOIN ist hier meiner meinung nach nicht notwendig, sondern du kannst einen INNER JOIN verwenden. in der tabelle rt_versionen wird es wohl keinen datensatz geben, der nicht auf einen datensatz in der mt_seiten tabelle verweist (Fremdschlüssel).

rt_versionen.PUBLTIME < NOW()

diese bedingung kann ich auch nicht nachvollziehen, es sei den es gibt schon versionen, die in einen zeit/datum eintrag haben, der in der zukunft, bzw. in der gegenwart liegt. wenn dies nie der fall sein sollte, kann man sich den auch sparen. aber dies kann ich nicht wirklich beurteilen, eben nur ein tipp.

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.

eine lösung mit allen spaltenwerten fällt mir spontan erst mal nur mit einer korelierenden unterabfrage ein. wenn ein mysql update aber gar nicht geht, dann versuch mal folgende abfrage, vielleicht hilft es ja ein wenig.

SELECT m.id, m.name, MAX(PUBLTIME) AS PUBLTIME
FROM rt_versionen AS r, mt_seiten AS m
WHERE m.ID = r.SEITEN_ID
AND m.ID IN (4, 10, 18, 24)
GROUP BY m.id, m.name