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?
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.
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
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"
Ä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
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.
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