tableForums
id | räknare
title | namnet på forumet
tableTopics
id | räknare
topic | tråd-rubrik
text | själva inlägget
date | datumet då tråden startades
poster | (integer) medlem som startade tråden
BelongsInForum | (integer)
tablePosts
id | räknare
text | själva inlägget
date | datumet då inlägget postades
poster | (integer) medlem som skrev inlägget
BelongsToTopic | (integer)
Nu vill jag på en sida rada upp alla olika forum, samt den tidpunkt då det senaste inlägget/tråden gjordes. Denna tidpunkt är ju ett datum som hämtas antingen från tableTopics, eller från tablePosts.
Hur skriver jag den SQL-satsen?
På en annan sida vill jag lista alla topics i ett forum. Även här vill jag visa datum för senaste inlägget i varje tråd. Detta datum hämtas antingen från tableTopics - om inget svar gjorts i tråden - eller från tablePosts - och i så fall datumet då det senaste inlägget i tråden gjordes.
select f.title, max(coalesce(tp.date,tt.date))
from forum f left join tableTopics tt
on f.id = tt.belongsInForum left join tablePosts tp
on tt.id = tp.belongsToTopic
group by f.title
select topic, max(coalesce(tp.date,tt.date))
from tableTopics tt left join tablePosts tp
on tt.id = tp.belongsToTopic
where belongsInForum in (
select id from forum
where title = 'Alkemi')
group by topic
tableTopics och tableReviews har ju även en kolumn som heter Poster, som innehåller ID:t på personen som postat det senaste inlägget. Hur får jag med denna kolumn i mina recordset?
Har även en tabell som ser ut så här:
tableUsers
ID | Räknare
Name | Användarnamnet
Förutom ID för personen som postat, vill jag även ha med personens användarnamn.
select f.title, date,poster
from (
select id,date,poster, BelongsInForum as forumId
from tableTopics
union
select BelongsToTopic, date,poster ,
(select belongsInForum from tableTopics
where id = tp.BelongsToTopic )
from tablePosts tp) dt
inner join forum f on dt.id = f.id
where date in (
select max(coalesce(tp.date,tt.date))
from forum f2 left join tableTopics tt
on f2.id = tt.belongsInForum left join tablePosts tp
on tt.id = tp.belongsToTopic
where f2.id = f.id
group by f.title)
Det är nu man ser en brist i din design.
Jag skulle ha lagrat även första inlägget (inklusive vem och datum) för en topic i tablePosts-tabellen.
Den kan tillexempel innehålla id, titel, belongsInForum. Du kanske också vill lagra antalet inlägg, senaste datum etc så man slipper beräkna det varje gång. Det innebär ju att du får uppdatera den tabellen vid varje inlägg men det kan det vara värt eftersom det är mest läsningar i ett forum.
382 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91