Hi,
Ich habe (u.a.) folgende Tabellen:
(*Primärschlüssel*, -->Fremdschlüssel)
meta_gallery ( *id*, page-->meta_page, title, desc, series )
meta_work ( *id*, gallery-->meta_gallery, title, desc, count, time )
meta_pictures ( *id*-->meta_work, alt, type, perRow )
Nun will ich zu einem bestimmten Bild A das vorherige (A-) und nächste Bild (A+) abfragen. Ich kenne die ID von A sowie seine Galerie (gallery) und die Seite (page) dieser Galerie.
Ich suche zunächst in der aktuellen Galerie die nächst niedrigere und höhere ID. Wenn eine davon nicht existiert (weil A das erste oder letzte Bild der Galerie ist), suche ich entsprechend die höchste ID der vorherigen Galerie bzw. die niedrigste der nächsten. Dafür habe ich auch einen guten Ausdruck gefunden:
(SELECT id FROM (
(SELECT MAX(id) AS id
FROM meta_work
WHERE gallery = 5 AND id < 87
)
UNION ALL (
SELECT MAX(meta_work.id)
FROM meta_work
LEFT JOIN meta_gallery
ON meta_work.gallery = meta_gallery.id
WHERE gallery < 5 AND page = 7
)
UNION ALL (
SELECT 0
)
) AS t
WHERE id IS NOT NULL
LIMIT 1
)
UNION ALL (
SELECT id FROM (
(SELECT MIN(id) AS id
FROM meta_work
WHERE gallery = 5 AND id > 87
)
UNION ALL (
SELECT MIN(meta_work.id)
FROM meta_work
LEFT JOIN meta_gallery
ON meta_work.gallery = meta_gallery.id
WHERE gallery > 5 AND page = 7
)
) AS t
WHERE id IS NOT NULL
LIMIT 1
)
Damit erhalte ich also die IDs. Nun möchte ich diese Abfrage direkt einsetzen, um die Daten der Bilder A- und A+ zu bekommen:
SELECT meta_work.`id`, `type`, meta_work.`title`, meta_gallery.`title`
FROM meta_picture
NATURAL JOIN meta_work
LEFT JOIN meta_gallery ON meta_work.`gallery` = meta_gallery.`id`
WHERE meta_work.`id` IN (
-- hier soll die Unterabfrage rein
) LIMIT 2
Plötzlich bekomme ich dann aber einen Syntax-Fehler irgendwo beim äußeren UNION ALL der Unterabfrage. (Die obige Abfrage funktioniert z.B. mit festen Werten übrigens tadellos).
Kann mir da jemand helfen? Oder zumindest sagen, wo der Fehler liegt?
vielen Dank,
Apropos