ErikBooy007
Terugkerende gebruiker
- Lid geworden
- 24 mei 2007
- Berichten
- 3.814
Goedemiddag dames, heren,
Ik heb een (volgens mij) vrij simpele vraag, maar kan het antwoord er niet echt op vinden.
Ik heb twee tabellen (hieronder zeer gesimplificeerd weergegeven):
ALBUMS
[table="width: 500, class: dotted"][tr][td]AID[/td][td]TITLE[/td][td]EVENTDATE[/td][/tr]
[tr][td]1[/td][td]Album Titel[/td][td]2013-07-12[/td][/tr]
[tr][td]2[/td][td]Album Titel 2[/td][td]2013-07-15[/td][/tr]
[/table]
PHOTOS
[table="width: 500, class: dotted"][tr][td]PID[/td][td]AID[/td][td]IMAGENAME[/td][/tr]
[tr][td]1[/td][td]1[/td][td]img_001.jpg[/td][/tr]
[tr][td]2[/td][td]1[/td][td]img_002.jpg[/td][/tr]
[tr][td]3[/td][td]1[/td][td]img_003.jpg[/td][/tr]
[tr][td]4[/td][td]1[/td][td]img_004.jpg[/td][/tr]
[tr][td]5[/td][td]1[/td][td]img_005.jpg[/td][/tr]
[tr][td]6[/td][td]2[/td][td]img_001.jpg[/td][/tr]
[tr][td]7[/td][td]2[/td][td]img_002.jpg[/td][/tr]
[tr][td]8[/td][td]2[/td][td]img_003.jpg[/td][/tr]
[tr][td]9[/td][td]2[/td][td]img_004.jpg[/td][/tr]
[tr][td]10[/td][td]2[/td][td]img_005.jpg[/td][/tr]
[/table]
Nu wil ik alle albums selecteren, plus van elk album een willekeurige foto. Nu krijg ik altijd het eerste resultaat. De query die ik gebruik is als volgt:
[SQL]
SELECT
ALBUMS.AID,
ALBUMS.TITLE,
ALBUMS.EVENTDATE,
PHOTOS.PID,
PHOTOS.IMAGENAME
FROM
ALBUMS
JOIN
PHOTOS ON ALBUMS.AID = PHOTOS.AID
GROUP BY
PHOTOS.AID
ORDER BY
ALBUMS.EVENTDATE DESC,
ALBUMS.TITLE ASC
[/SQL]
UPDATE:
Heb nu de volgende query:
[SQL]
SELECT
ALBUMS.AID,
ALBUMS.TITLE,
ALBUMS.EVENTDATE,
PHOTOS.IMAGENAME
FROM
ALBUMS
JOIN
(
SELECT
AID,
PID,
IMAGENAME
FROM
PHOTOS
ORDER BY
RAND()
) AS PHOTOS ON ALBUMS.AID = PHOTOS.AID
GROUP BY
PHOTOS.AID
ORDER BY
ALBUMS.EVENTDATE DESC,
ALBUMS.TITLE ASC
[/SQL]
Maar we weten allemaal dat ORDER BY RAND() niet in een snelle query thuishoort toch? ;-) Deze query duurt nu al gemiddeld 30ms, op tabellen met 19 albums en 5078 foto's. Dat zullen er nog véél meer worden.
Ik heb een (volgens mij) vrij simpele vraag, maar kan het antwoord er niet echt op vinden.
Ik heb twee tabellen (hieronder zeer gesimplificeerd weergegeven):
ALBUMS
[table="width: 500, class: dotted"][tr][td]AID[/td][td]TITLE[/td][td]EVENTDATE[/td][/tr]
[tr][td]1[/td][td]Album Titel[/td][td]2013-07-12[/td][/tr]
[tr][td]2[/td][td]Album Titel 2[/td][td]2013-07-15[/td][/tr]
[/table]
PHOTOS
[table="width: 500, class: dotted"][tr][td]PID[/td][td]AID[/td][td]IMAGENAME[/td][/tr]
[tr][td]1[/td][td]1[/td][td]img_001.jpg[/td][/tr]
[tr][td]2[/td][td]1[/td][td]img_002.jpg[/td][/tr]
[tr][td]3[/td][td]1[/td][td]img_003.jpg[/td][/tr]
[tr][td]4[/td][td]1[/td][td]img_004.jpg[/td][/tr]
[tr][td]5[/td][td]1[/td][td]img_005.jpg[/td][/tr]
[tr][td]6[/td][td]2[/td][td]img_001.jpg[/td][/tr]
[tr][td]7[/td][td]2[/td][td]img_002.jpg[/td][/tr]
[tr][td]8[/td][td]2[/td][td]img_003.jpg[/td][/tr]
[tr][td]9[/td][td]2[/td][td]img_004.jpg[/td][/tr]
[tr][td]10[/td][td]2[/td][td]img_005.jpg[/td][/tr]
[/table]
Nu wil ik alle albums selecteren, plus van elk album een willekeurige foto. Nu krijg ik altijd het eerste resultaat. De query die ik gebruik is als volgt:
[SQL]
SELECT
ALBUMS.AID,
ALBUMS.TITLE,
ALBUMS.EVENTDATE,
PHOTOS.PID,
PHOTOS.IMAGENAME
FROM
ALBUMS
JOIN
PHOTOS ON ALBUMS.AID = PHOTOS.AID
GROUP BY
PHOTOS.AID
ORDER BY
ALBUMS.EVENTDATE DESC,
ALBUMS.TITLE ASC
[/SQL]
UPDATE:
Heb nu de volgende query:
[SQL]
SELECT
ALBUMS.AID,
ALBUMS.TITLE,
ALBUMS.EVENTDATE,
PHOTOS.IMAGENAME
FROM
ALBUMS
JOIN
(
SELECT
AID,
PID,
IMAGENAME
FROM
PHOTOS
ORDER BY
RAND()
) AS PHOTOS ON ALBUMS.AID = PHOTOS.AID
GROUP BY
PHOTOS.AID
ORDER BY
ALBUMS.EVENTDATE DESC,
ALBUMS.TITLE ASC
[/SQL]
Maar we weten allemaal dat ORDER BY RAND() niet in een snelle query thuishoort toch? ;-) Deze query duurt nu al gemiddeld 30ms, op tabellen met 19 albums en 5078 foto's. Dat zullen er nog véél meer worden.
Laatst bewerkt: