meerdere selecties uit meerdere tabellen in 1 query
Nu wil ik door middel van de tabellen images en albumimages een overzicht krijgen met alle foto's uit bijv. album 5 en 8. Uit 1 album gaat wel goed, maar bij het toevoegen van een tweede album gaat het steeds verkeerd. Hieronder de SQL-query voor 1 album.
SELECT image_id, filename, albumbase_id
FROM images, albumimages
WHERE images.image_id = albumimages.imagebase_id
AND albumimages.albumbase_id = 5
ORDER BY images.image_id ASC
Hoe kan ik hier nog een selectie overheen gooien? B.v.d. Auke.
Daarnaast heb ik er een JOIN toegevoegd ipv de komma's die je gebruikte.
Tevens is het ook handig als je je query netjes opbouwd met het inspringen van regels etc. In een later stadium kun je dit weer weghalen als je zeker weet dat het werkt. Tijdens het scripten is het wel heel handig, je ziet direct wat er waar gebeurd.
zou je de eerste conditie niet liever als ON images.image_id = albumimages.imagebase_id aan INNER JOIN toevoegen?
Misschien dat iemand hier meer verstand van heeft?
Plus het voordeel dat je SQL beter leesbaarder wordt.
Daarnaast kan je wellicht beter IN (...) gebruiken.
Dat houdt je SQL korter (en makkelijker uitbreidbaar):
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT
images.image_id,
images.filename,
albumimages.albumbase_id
FROM images AS i
INNER JOIN albumimages AS a
ON i.image_id = a.imagebase_id
WHERE a.albumbase_id IN (5, 8)
ORDER BY a.album_naam DESC, i.image_id ASC
images.image_id,
images.filename,
albumimages.albumbase_id
FROM images AS i
INNER JOIN albumimages AS a
ON i.image_id = a.imagebase_id
WHERE a.albumbase_id IN (5, 8)
ORDER BY a.album_naam DESC, i.image_id ASC
Let even op dat ik ook je ORDER BY aangepast hebt aan de album_naam. Die heb je misschien niet, dus let daar even op ;)
Daarnaast is het gebruik van aliassen (AS i) puur voor je eigen leesbaarheid en snelheid. Je maakt minder typefouten en je code wordt overzichtelijker.
Met IN kan je gewoon de 'id' achter elkaar zetten, bijvoorbeeld met echo implode($ids, ", ");.
Dank, ik ben weer iets wijzer en blijer. Groet Auke.
Een INNER JOIN zonder voorwaarden (ON of USING) is eigenlijk een CROSS JOIN. MySQL laat dit toe, maar er zijn systemen waar dit niet kan.
Of het in performance uit kan maken laat ik even in het midden, het is gewoon geen nette SQL.