24. januar 2004 - 18:44Der er
4 kommentarer og 1 løsning
Nyeste billede med GROUP BY
Jeg har en database over objeket, der er organiseret i en række kategorier. Hvert objekt har mindst et billede tilknyttet.
Nu vil jeg gerne konstruere et query der returnerer ét billede (picture_id) til det nyeste objekt (udfra date_of_entry) i hver kategori. Altså, fem kategorier=fem billeder..
Mine tabeller: Object (id, category_fk, date_of_entry) ObjectPicture (id, object_fk, picture_fk) Picture (id .. ) (teknisk set behøver den ikke være med, skal bare bruge picutre_fk)
Hvordan bikser jeg det sammen? Jeg forestiller mig noget med: SELECT MAX(ObjectPicture.picture_fk) AS picture_id,MAX(category_fk) AS category_id FROM Object, ObjectPicture, Picture WHERE ObjectPicture.object_fk=Object.id AND ObjectPicture.picture_fk = Picture.id GROUP BY category_fk;
Det giver mig et billede til hver kategori, men det er sorteret efter billedets id, ikke dato..
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
SELECT MAX(ObjectPicture.picture_fk) AS picture_id,MAX(category_fk) AS category_id FROM Object, ObjectPicture, Picture WHERE ObjectPicture.object_fk=Object.id AND ObjectPicture.picture_fk = Picture.id GROUP BY category_fk ORDER BY date_of_entry DESC
Det giver mig en fejl: Column name 'Object.date_of_entry' is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
Så jeg group'er by date_of_entry: SELECT MAX(ObjectPicture.picture_fk) AS picture_id,MAX(category_fk) AS category_id FROM Object, ObjectPicture, Picture WHERE ObjectPicture.object_fk=Object.id AND ObjectPicture.picture_fk = Picture.id GROUP BY category_fk,date_of_entry ORDER BY date_of_entry DESC
Ingen fejl -- men nu får jeg samme category_id flere gange.. det ser ud til at jeg får et billede pr. unikke dato.. ?
Hvis jeg bruger datoen i en funktion i stedet: SELECT MAX(ObjectPicture.picture_fk) AS picture_id,MAX(category_fk) AS category_id, MAX(date_of_entry) AS date FROM Object, ObjectPicture, Picture WHERE ObjectPicture.object_fk=Object.id AND ObjectPicture.picture_fk = Picture.id GROUP BY category_fk,date_of_entry ORDER BY date_of_entry DESC
Det ser ud til at give samme resultat, bare med en dato på ..
select picture_fk from ObjectPicture join object on object.id = ObjectPicture.object_fk where object.date_of_entry in (select max(date_of_entry) from object)
Hvis flere objects kan have samme date_of_entry, kan du vælge en tilfældig af disse med
Jeg vil helst ikke bruge nestede SELECTs når det ikke er nødvendigt.
Anyway, jeg har løst det i Access' view-design.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.