Avatar billede dgivoni Nybegynder
09. august 2002 - 16:35 Der er 8 kommentarer og
3 løsninger

hvilken sql-sætning?

Jeg har en database med en tabel, discussionMessage, i.
Den indeholder:
id (unik)
name
title
message
replyId
createTime

Den opbevarer diskussionsindlæg. En ny tråd har replyid=0, og i en svar-besked indeholder replyid id'et på den besked der startede tråden.

Jeg ønsker så en oversigt over de senest besvarede tråde. Dvs. ikke alle seneste besvarelser, kun én pr. tråd.
Oversigten skal indeholde den oprindelige titel, createTime for den nyeste tråd, samt replyid'et (dvs. id'et på tråden).

Jeg har bikset en del med subselects, men desværre uden held. Nogen forslag?
Avatar billede neteffect Nybegynder
09. august 2002 - 16:44 #1
Nej, desværre. Det er synd du ikke har to tabeller, nemlig discussionMessage og discussionThread.
Avatar billede dgivoni Nybegynder
09. august 2002 - 16:49 #2
nå, det var overraskende.
jeg kunne jo godt lave to tabeller, men syntes ikke det var nødvendigt i dette tilfælde. Men det er det måske alligevel...
Avatar billede a1a1 Novice
09. august 2002 - 16:56 #3
SELECT id, title FROM discussionMessage WHERE replyID <> 1 ORDER BY ID
skulle vel give dig de nyeste

SELECT DISTINCT dm.id, dm.title, (SELECT dm2.replyID FROM discussionMessage dm2 WHERE ID=dm.id) AS repID FROM discussionMessage dm WHERE replyID <> 1 ORDER BY ID

?
prøv at se om den dur ;)
Avatar billede tmceu Praktikant
09. august 2002 - 16:56 #4
Prøv lige med denne:

SELECT DISTINCT Title, ReplyID, MAX(CreateTime)
FROM discussionMessage
WHERE ReplyID <> 0
GROUP BY Title, ReplyID
Avatar billede a1a1 Novice
09. august 2002 - 16:56 #5
SELECT DISTINCT dm.id, dm.title, (SELECT dm2.replyID FROM discussionMessage dm2 WHERE ID=dm.id) AS repID FROM discussionMessage dm WHERE dm.replyID <> 1 ORDER BY dm.ID
Avatar billede a1a1 Novice
09. august 2002 - 17:01 #6
hov der er (nok) et par fejl, og du skal jo også have tiden på

SELECT DISTINCT dm.id, dm.title, (SELECT dm2.id FROM discussionMessage dm2 WHERE ID=dm.id) AS repID, (SELECT dm3.createtime FROM discussionMessage dm2 WHERE ID=dm.id) AS repTime FROM discussionMessage dm WHERE dm.replyID <> 1 ORDER BY dm.ID
Avatar billede a1a1 Novice
09. august 2002 - 17:02 #7
men det er da en "grim" sql sætning hvis den overhovedet dur :)
Avatar billede riversen Nybegynder
09. august 2002 - 17:28 #8
hmmm...den er da vist helt gal på eksperten. Klikker på et link til et spørgsmål jeg har oprettet og ender her...
Avatar billede dgivoni Nybegynder
12. august 2002 - 09:17 #9
tak for alle svarene. Der er desværre ingen af dem, der gør det ønskede.
Et af problemerne, som jeg også selv kæmpede med er, at distinct vælger unikke poster ud fra ALLE felterne, dvs. at så længe createTime skal hives med ud, så er alle poster pr. definition unikke, med mindre de er oprettet i præcis samme øjeblik.
Så hvordan kommer man udenom det?
Avatar billede dgivoni Nybegynder
12. august 2002 - 09:51 #10
Så fik jeg det til at virke:
SELECT id, title, (SELECT MAX(dm2.createTime) FROM discussionMessage AS dm2 WHERE dm2.replyId = discussionMessage.id or dm2.id = discussionMessage.id)
AS time FROM discussionMessage WHERE (replyId = 0) order by time desc

I får lidt point for at lede mig i den rigtige retning...
Avatar billede a1a1 Novice
12. august 2002 - 10:25 #11
tak tak :)
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