Een iets ingewikkelder MySQL-vraagje vandaag. Ik ben bezig aan een fotoalbum en ik wil graag, net als in Windows Explorer, dat je bij een map alvast vier kleine foto'tjes ziet uit die map.

Op het moment haal ik met één query alle mappen op. Dat zou ik graag zo willen houden, in verband met de snelheid. Is het mogelijk om in die ene query gelijk vier willekeurige foto's te selecteren uit een andere tabel?

In de tabel met foto's wordt het id van de map waar de foto in staat opgeslagen. Op die manier is een foto te herkennen als in een bepaalde map horende.

Is dit mogelijk met MySQL? En ook rekening houdend met het feit dat niet in alle mappen vier foto's zitten en dat er geen records dubbel geselecteerd mogen worden?
Ik denk niet dat dat mogelijk is in 1 query, omdat je eigenlijk een 2D array zou terug moeten krijgen ( Voor elke map max 4 afbeelding ).
Dit zijn verschillende vragen dus zul je ook verschillende queries nodig hebben. En om alle mappen op te halen en vervolgens om per map 4 foto's op te halen...

Uiteraard is het wel mogelijk in enkel SQL, maar dan zul je gebruik moeten maken van stored procedures om het gewenste resultaat uit de query te krijgen...
Dubbele records mogen niet voorkomen, dan is jouw datamodel niet goed.

Verder klinkt het alsof je een subquery nodig hebt, maar daar kun je in MySQL geen LIMIT op gebuiken. Ik vermoed dat je per map een aparte query nodig hebt om 4 willekeurige foto's op te halen.

Maar geef je datamodel eens, dan kunnen we echt meedenken.

Edit: Een stored procedure kan ook, maar die voert in feite ook aparte queries uit. Het grote voordeel is alleen dat je geen interactie tussen PHP en de database nodig hebt, het gaat dus sneller.
pgFrank schreef op 23.02.2008 14:09
Dubbele records mogen niet voorkomen, dan is jouw datamodel niet goed.


Sorry, zat idd een kromme zin in mijn post. Moet zijn:

...dat er geen records dubbel geselecteerd mogen worden?


Datamodel met wat data erin:

-- Zie de structuur een aantal posts verderop --
MyISAM... Daarmee is geen relationele database te maken, ga de boel eerst maar eens omzetten naar innoDB en de foreign keys inbouwen.
pgFrank mag ik vragen of dat voor dit probleem IETS uit maakt? Het is leuk dat je hem probeert te helpen, maar hij vraagt hier toch niet om.
Steffan schreef op 23.02.2008 14:40
maar hij vraagt hier toch niet om.
En is dat een reden om iemand maar van de wal in de sloot te helpen? Voor mij in elk geval niet.

Zorg eerst voor een goede basis, een goed datamodel met de juiste relaties, en ga je dan pas druk maken over het ophalen van de data. Data moet in de eerste plaats betrouwbaar zijn, of niet dan?
@Steffan: Dat maakt voor dit probleem heel veel uit! Er wordt namelijk bij het selecteren van de records uitgegaan van relaties tussen tabellen die helemaal niet bestaan. Met andere woorden, je weet nooit of de data die je terug krijgt wel betrouwbaar is!

Bovendien bestaat het helpen van iemand niet altijd uit het enkel antwoord geven op de gestelde vraag, maar soms ook uit het aanwijzen van grotere problemen en daar een oplossing voor geven. Je kunt nu wel de oplossing op het gestelde probleem geven, maar daar heeft de TS niets aan als zijn database straks op z'n gat ligt.
True,true.. Maaaar nu verwacht ik ook antwoord op zijn vraag natuurlijk :)
Steffan schreef op 23.02.2008 14:55
True,true.. Maaaar nu verwacht ik ook antwoord op zijn vraag natuurlijk :)
Het lijkt me dat dat in post 2-4 van dit topic al gegeven is: nee, het kan waarschijnlijk niet in 1 query. En aan de hand van het datamodel wordt vervolgens de suggestie gegeven om dat eerst eens aan te passen, aangezien dat zeker problemen gaat geven...

Ik snap je punt dus niet echt.

Reageren