Avatar billede jonas_h Nybegynder
19. juni 2006 - 16:30 Der er 9 kommentarer

Rækkefølge når der bruges DISTINCT

Jeg skal have udskrevet en liste over seneste forum-indlæg...
Måden min db er bygget op, er at der til hvert Topic tilhører et unikt TID. Til et topic, hører så en masse posts, som hver har et unikt PID, og et fælles TID.

Hvordan kan jeg få skrevet en liste over f.eks. 10 nyeste indlæg ud, og samtidigt tage højde for, at der kan være mange posts i træk i et indlæg?

Prøvede
SELECT DISTINCT TID FROM posts ORDER BY PID DESC

Her får man rigtigt nok Distinct TID-værdier ud, men ikke i korrekt rækkefølge...

Nogle der kan hjælpe?
Avatar billede Slettet bruger
19. juni 2006 - 16:49 #1
Hvilken rækkefølge vil du gerne have?
-Hvis du vil have de 10 senest aktive topics, skulle din forespørgsel kunne gøre arbejdet.
-Hvis du derimod vil have de 10 nyest oprettet topics, skal du sortere efter TID.

/1
Avatar billede erikjacobsen Ekspert
19. juni 2006 - 16:50 #2
Hvad er meningen den skal gøre?  Til en TID er der mange PID-er - hvilken skal den så sortere efter?
Avatar billede jonas_h Nybegynder
19. juni 2006 - 20:59 #3
Når den skal finde de 10 seneste aktiviteter, må det jo være PID den skal sortere efter, hvor den tager de største først...?
Avatar billede Slettet bruger
20. juni 2006 - 07:38 #4
Så er "SELECT DISTINCT TID FROM posts ORDER BY PID DESC" den rigtige løsning.

Du skal jo tænke på at TID kan komme i en vilkarlig rækkefølge, da trådens oprettelsesid ikke direkte har noget at gøre med, hvornår der sidst er skrevet i den.
Avatar billede jonas_h Nybegynder
20. juni 2006 - 08:00 #5
Ja det var også hhvad jeg troede - men prøvede at sortere i "omvendt" rækkefølge (fjerne DESC), og så virkede det.. Forstår stadig ikke hvorfor, men så længe det virker er det vel fint nok:)
Avatar billede jonas_h Nybegynder
20. juni 2006 - 08:02 #6
Eller nej, det virker faktisk stadig ikke! Hmm.. Den sorterer i samme rækkefølge ligemegt om man opretter en post i den "ældste".
Avatar billede Slettet bruger
20. juni 2006 - 09:29 #7
Prøv at paste "SELECT TID, PID FROM posts ORDER BY PID DESC" med format:

TID1, PID1
TID2, PID2
osv.

Og derefter "SELECT DISTINCT TID FROM posts ORDER BY PID DESC" med format:

TID1
TID2
osv.

/1.
Avatar billede jonas_h Nybegynder
20. juni 2006 - 11:34 #8
tId  pId 
1 15
1 14
2 13
1 12
2 11
3 10
3 9
1 8
1 7
1 6
1 5
1 4
3 3
2 2
1 1

tId 
3
2
1
Avatar billede Slettet bruger
20. juni 2006 - 15:48 #9
Hmm.. Prøv denne ikke testede forespørgsel - kan forestille mig, at du alligevel vil have fat i [topics] på et tidspunk.

SELECT MAX([posts].[PID]) AS [PID], [topics].[TID] FROM [topics] INNER JOIN [posts] ON ([posts].[TID] = [topics].[TID]) GROUP BY [topics].[TID] ORDER BY MAX([posts].[PID])

/1.
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