JEMedlem sedan juni 2000144 inlägg Håller på med ett litet forum men har stött på lite problem med en SQL sats.
Så här ser min databas (För tillfället Access, senare MS SQL) ut, tar med det som är väsentligt för frågan.
Threads
---------------------
Thread_ID
Subject
StartDate
Posts
Posts
---------------------
Post_ID
Message
PostDate
Nu vill jag via en SQL sats välja alla trådar (Threads) och sortera dom efter vilken tråd det senaste inlägget gjordes.
Det senaste inlägget bestämms genom att gå igenom alla Posts som finns för tråden och sortera dom efter PostDate och där hämta det senaste datumet.
Det jag vill ha ut på sidan är
Threads.Subject
Threads.Posts
Threads.StartDate
Posts.PostDate(senaste datumet från Posts för just den tråden)
Att lista alla Trådar görs genom
"SELECT Subject, StartDate, Posts FROM Threads"
Att bara få fram det senaste PostDate från Posts går ju enkelt att göra genom
"SELECT TOP 1 PostDate FORM Posts WHERE Thread_ID=1 ORDER BY PostDate DESC"
Men jag vill alltså baka in det i den första SQL satsen som listar alla Trådar. Hur går jag tillväga?
[Redigerat av JE den 12 jan 2001]
ToonsterMedlem sedan feb. 20001 590 inlägg SELECT thread_id,subject,startdate,posts,post_id,message,postdate FROM Threads,Posts WHERE (threads.posts=posts.post_id) ORDER BY postdate
Är inte helt säker på vad du menade, men tror det var som ovan
/T
------------------
------------------->8 klipp här!!
JEMedlem sedan juni 2000144 inlägg Nja inte riktigt.
Posts fältet i Threads tabellen är antalet inlägg i den tråden. Missade ju dock det allra viktigast. I Posts tabellen ska det finnas ett fält som heter Thread_ID som är relaterat till Thread_ID i Threads tabellen.
Tar ett litet exempel:
Threads tabellen innehåller:
Thread_ID - - Subject - - StartDate - - Posts
-------------------------------------------
1 - - Detta e tråd nr1 - - 2001-01-10 - - 3
2 - - Detta e tråd nr2 - - 2001-01-11 - - 7
I Posts tabellen:
Post_ID - - Thread_ID - - Message - - PostDate
-----------------------------------
1 - - 1 - - Detta e mezz 1 - - 2001-01-10
2 - - 1 - - Detta e mezz 2 - - 2001-01-13
3 - - 2 - - Ännu ett inlägg - - 2001-01-11
Nu vill jag alltså lista dom trådar som finns i Threads tabellen men samtidigt hämta datumet för det senaste inlägget i den tråden från Post tabellen (PostDate), dvs 2001-01-13.
LarsGMedlem sedan dec. 200012 464 inlägg Så här kanske
SELECT subject, startdate, posts,
(select max(postDate) from posts
where posts.thread_id = threads.thread_id ) as lastDate from threads
order by lastDate
------------------
essentitia preter non sans multiplicandum
JEMedlem sedan juni 2000144 inlägg Funkar precis som jag ville ha det förutom att sorteringen inte fungerar.
Den vill inte sortera efter lastDate. Den sorterar efter Thread_ID istället.
Den verkar med andra ord inte ta "ORDER BY lastDate"
[Redigerat av JE den 15 jan 2001]
[Redigerat av JE den 15 jan 2001]
LarsGMedlem sedan dec. 200012 464 inlägg Är sorteringen verkligen på thread_id? Är den inte stigande på datumordning i stället? Testa att lägga på ett DESC i order by. Om du verkligen får sortering enligt thread_id så tyder det på ett fel i DBMS.
------------------
essentitia preter non sans multiplicandum
JEMedlem sedan juni 2000144 inlägg Hmm, ja sorteringen är inte på lastDate iaf. Det vägrar den sortera efter.
Testade att köra SQL satsen som en fråga i Access och när man ska visa den som tabelläge (alltså visa resultatet) så kommer det upp en popup ruta som frågar efter "Ange variabelvärde för lastDate" eller liknande, sitter inte där jag har filerna just nu.
Kan zippa ihop en liten testfil som du kan få testa på om du har tid, vore oerhört tacksam. Blir inte klok på detta.
LarsGMedlem sedan dec. 200012 464 inlägg Jag har tyvärr ingen möjlighet att testa detta då jag inte har tillgång till Access.
Man kan skriva om SQL-satsen på lite olika sätt. Antingen med en outer join eller union. Om du tittar i denna tråd så diskuteras det ett liknande problem.
http://cgi.webforum.nu/wf/Forum12/HTML/000696.html
Tillägg:
Du kanske kan ändra datamodellen så att du sparar senast datum i threads-tabellen? Du måste ju ändå uppdatera den när du ändrar antal poster.
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 15 jan 2001]
JEMedlem sedan juni 2000144 inlägg Har testat lite olika former av SQL satsen men JOINS och UNION men det vill inte riktigt funka det heller.
Aja, får ta och ändra designen för databasen istället, blir nog enklare trots allt.
Tack för all hjälp ändå!
Case Closed! :)