Avatar billede taf Nybegynder
05. juli 2007 - 23:02 Der er 5 kommentarer

Sortering FØR ORDER BY

jeg skal vise nogle gallerier med de nyeste billeder som galleri link men min SQL driller...:
SELECT count(id) as nrpics, folder, url, id, title, userid, date FROM oebk_pictures GROUP BY folder ORDER BY date DESC

Det jeg vil have den til er at smide det nyeste billede for hver folder ud så jeg kan vise ET billede for hver folder.
Lige nu er det som om at den tager et billede fra hver folder. Og derefter sortere den de data den får ud (altså kun ca 5 records da der kun er 5 folders) gahh.

5      En god dag i Slipshavn      thomas--frederik 009.jpg      161      frederik      35      2007-01-18 16:02:07
43     Klubmesterskab 2006     P1010043.JPG     110     Klubmesterskab 2006     38     2006-09-13 19:51:55
57     DBO stævne Nyborg 2006     dboforside.jpg     56     DBO stævne Nyborg     38     2006-09-10 12:33:27
34     Klubmesterskab 2005     DSC_3506.JPG     20     Klubmesterskab 2005     3     2006-05-16 18:38:04
19     Generelt     chick_two.jpg     1     Surf chick     1     2004-08-26 18:46:17
Avatar billede taf Nybegynder
05. juli 2007 - 23:04 #1
Den skulle jo gerne sortere alle records og derefter groupe dem.

Lige nu får jeg konstant de 5 første billeder der blev tilføjet databasen.
gahh...

måske skulle jeg bare dele den op i flere SQL sætninger, en for hver folder....
Avatar billede kjulius Novice
06. juli 2007 - 15:58 #2
Forudsat, at id er et autonummereringsfelt, som bliver større hele tiden (det er vist det mest normale), så kunne en mulighed være noget lignende dette:

SELECT *
FROM oebk_pictures p
WHERE id = (
  SELECT MAX(id)
  FROM oebk_pictures
  WHERE folder = p.folder)

Det er en sætning som bruger en subselect, som jo har et dårligt navn hvad angår effektivitet (hastighed), da det teoretisk (og hvis databasen optimerer dårligt) skal udføre subselecten for hver række i hovedselecten, så hvis den performer meget dårligt var en anden mulighed en nested select som:

SELECT p.*
FROM oebk_pictures p
INNER JOIN (
  SELECT folder, MAX(id) AS maxid
  FROM oebk_pictures
  GROUP BY folder
) pm ON pm.folder = p.folder AND pm.maxid = p.id
Avatar billede kjulius Novice
02. august 2007 - 17:35 #3
Tænker du stadig?
Avatar billede taf Nybegynder
27. august 2007 - 10:05 #4
Hehe, er lige begyndt at tænke igen:)
holdt en lille pause.
Kigger lige på det i aften.
Avatar billede kjulius Novice
30. august 2007 - 12:12 #5
Okay, pauser er nogen gange nødvendige. Det hjælper somme tider når man er kørt fast eller har mistet interessen lidt. Velkommen tilbage! :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester