Avatar billede galaxy Nybegynder
29. januar 2004 - 18:16 Der er 16 kommentarer

Udtræk uden gentagelse

Jeg har lave denne select:

SELECT ID, subject FROM messages GROUP BY ID ORDER BY ID DESC LIMIT 5

Dens opgave er, at lave en oversigt over de 5 nyeste indlæg i mit forum, uden at vise 2 beskeder fra samme tråd.

Det virker også, til en hvis grad. Problemet er så bare, at hvis en tråd startes med subject 'This is a test' og der lige efter kommer et svar, så gemmes svaret som 'RE: This is a test'.

Hvis jeg nu havde 'This is a test' som en variabel kunne jeg jo bare lave en NOT HAVING eller lignende, men det har jeg jo ikke med mindre, jeg laver 2 select-sætninger, hvilket jeg helst vil undgå, da den sætning jeg har i forvejen sløver min side rigeligt.

Er der en måde at få SQL'en til, at kun hente den nyeste af disse to: 'This is a test' og 'RE: This is a test' ? (den nyeste findes selvf. på ID)
Avatar billede arne_v Ekspert
29. januar 2004 - 18:20 #1
SELECT ID,REPLACE(subject,'RE: ','') FROM ...

måske
Avatar billede galaxy Nybegynder
29. januar 2004 - 18:27 #2
jep, så fjerner den godt nok 'RE: ', men begget tupler bliver stadig hentet
Avatar billede arne_v Ekspert
29. januar 2004 - 18:34 #3
Prøv med:

SELECT DISTINCT ID,REPLACE(subject,'RE: ','') FROM ...
Avatar billede galaxy Nybegynder
29. januar 2004 - 19:00 #4
Den har ingen virkning, da ID jo så bliver taget med i DISTINCT og altid er forskellig.
Avatar billede arne_v Ekspert
29. januar 2004 - 19:05 #5
Når du har GROUP BY ID har du jo bedt om at få en record per ID. Vil du ikke det ?
Avatar billede galaxy Nybegynder
29. januar 2004 - 19:09 #6
Sorry min fejl... jeg har selvfølgelig GROUP BY subject
Avatar billede galaxy Nybegynder
29. januar 2004 - 19:10 #7
SELECT ID, REPLACE(subject,'RE: ','')) FROM vbb_message GROUP BY subject ORDER BY ID DESC LIMIT 5

Sådan ser den ud lige nu
Avatar billede galaxy Nybegynder
29. januar 2004 - 19:11 #8
SELECT (DISTINCT REPLACE(subject,'RE: ',''), ID FROM vbb_message GROUP BY subject ORDER BY ID DESC LIMIT 5
Avatar billede galaxy Nybegynder
29. januar 2004 - 19:12 #9
SELECT ID, REPLACE(subject,'RE: ','') FROM vbb_message GROUP BY subject ORDER BY ID DESC LIMIT 5

Jeg kan bare ikke stoppe med at kvaje mig lige nu... Denne skulle være rigtig :)
Avatar billede arne_v Ekspert
29. januar 2004 - 19:17 #10
Den konstruktion kan kun bruges hvis der kun er en ID per subject.

Måske vil du:

SELECT MAX(ID), REPLACE(subject,'RE: ','') FROM vbb_message GROUP BY subject ORDER BY ID DESC LIMIT 5
Avatar billede galaxy Nybegynder
29. januar 2004 - 19:24 #11
giver tomt udtræk
Avatar billede arne_v Ekspert
29. januar 2004 - 19:32 #12
Tomt ? Så er der nok en SQL fejl. Måske skal det være ORDER BY MAX(ID).
Avatar billede galaxy Nybegynder
29. januar 2004 - 20:12 #13
nope... dén giver emlig fejl
Avatar billede galaxy Nybegynder
29. januar 2004 - 20:14 #14
Ender sgu nok med, at jeg må trække 10 ud i stedet og så sortere dem med PHP'en.
Mente bare, at det måtte kunne lade sig gøre i SQL.
Avatar billede galaxy Nybegynder
29. januar 2004 - 20:47 #15
Hmmm, kan man ikke forhøje points mere ??
Avatar billede arne_v Ekspert
29. januar 2004 - 23:13 #16
SELECT MAX(ID), REPLACE(subject,'RE: ','') FROM vbb_message GROUP BY REPLACE(subject,'RE: ','') ORDER BY MAX(ID) DESC LIMIT 5

bør virke.
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