Vinnaren i pepparkakshustävlingen!
2008-10-09, 00:01
  #1
Medlem
Jag har två tabeller:
galleries( galleryID, galleryName )
galleryFiles( fileID, galleryID, uploadTime )

Nu vill jag hämta max 5 bilder (galleryFiles) ur max 3 gallerier, ordnat efter galleryFiles.uploadTime.

Jag tänker mig nåt sånt här:
Kod:
SELECT g.* FROM galleries AS g
	LEFT JOIN (SELECT gID FROM galleryFiles ORDER BY uploadTime DESC LIMIT 5) AS gf ON gf.gID = g.gID
		ORDER BY g.uploadTime DESC LIMIT 5

Men det blir ju inte riktigt rätt.

Någon som har förslag? Kör Mysql förresten.
Citera
2008-10-09, 00:40
  #2
Medlem
ADDs avatar
hoppas följande sql e vad du e ute efter

SELECT g.* FROM galleryFiles AS g
WHERE g.gID IN ( SELECT gID FROM ( SELECT gID FROM galleryFiles ORDER BY uploadTime DESC LIMIT 3 ) D1 )
ORDER BY g.uploadTime DESC
LIMIT 5
Citera
2008-10-09, 01:30
  #3
Medlem
Citat:
Ursprungligen postat av ADD
hoppas följande sql e vad du e ute efter

SELECT g.* FROM galleryFiles AS g
WHERE g.gID IN ( SELECT gID FROM ( SELECT gID FROM galleryFiles ORDER BY uploadTime DESC LIMIT 3 ) D1 )
ORDER BY g.uploadTime DESC
LIMIT 5
Fast det där ger fortfarande bara 5 resultat... Det jag vill ha är max 5 poster per galleri, och max 3 galleri. Dvs jag vill hämta de tre senaste gallerierna, samt max 5 filer per galleri. I praktiken blir det alltså max 15 filer som hämtas. Hänger du med?
Citera
2008-10-09, 03:46
  #4
Medlem
ADDs avatar
Ah, 5 per galleri, då blir det genast knepigt.

Personligen skulle jag delat upp det i 2 delar där jag i första query'n tar jag reda på galleri nummren å sen en andra query som körs i en loop å hämtar ut 5 bilder per galleri.

Jag har för mig att det ska gå å göra detta i 1 enda query men kommer inte ihåg hur , kan kolla på det senare men förhoppningsvis finns det nån annan här som e bättre på SQL än mig.

Lycka till
Citera
2008-10-09, 06:21
  #5
Moderator
Protons avatar
Det här får bli en ful-lösning, men den borde funka....

Kod:
CREATE TEMPORARY TABLE gal 
SELECT galleries.id FROM galleries ORDER BY uploadTime LIMIT 3;

SELECT * FROM galleryFiles INNER JOIN gal ON gal.gID = galleryFiles.gID LIMIT 5 GROUP BY galleryFiles.gID;

Som sagt, riktigt ful lösning, men det borde kunna funka.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback