Ik heb in MS SQL een tweetal tabellen voor een messageboard-module op ons intranet. Deze zijn:
svepweb_nieuwsgroepen
Deze tabel bevat de 7 boards die we op dit moment hebben met een ID en een naam.
svepweb_nieuwsgroepen_berichten
Je raadt het al, hier staan de berichten in met daarbij een boardId en de bericht tekst.
Nu wil ik in een stored procedure voor elk messageboard het meest recente bericht ophalen. (ben ik al 3 dagen mee bezig) en uiteindelijk ben ik via een cursor tot dit gekomen:
Dit werkt als een zonnetje, ik krijg 7 recordsets met daarin 1 record, namelijk dat record dat het meest recent is voor elk board.
Maar ik wil geen 7 queries vanuit ASP moeten doen om dat voor elk board op te moeten halen en ik krijg dus nu 7 recordsets terug. Met UNION kan ik weinig en ik heb ook met views lopen klooien maar ik zit helemaal vast. Heeft iemand een (waarschijnlijk veel handiger) manier om per messageboard het meest recente item terug te geven in 1 recordset? Mijn dank is groot.
svepweb_nieuwsgroepen
Deze tabel bevat de 7 boards die we op dit moment hebben met een ID en een naam.
svepweb_nieuwsgroepen_berichten
Je raadt het al, hier staan de berichten in met daarbij een boardId en de bericht tekst.
Nu wil ik in een stored procedure voor elk messageboard het meest recente bericht ophalen. (ben ik al 3 dagen mee bezig) en uiteindelijk ben ik via een cursor tot dit gekomen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| DECLARE @au_id int DECLARE @au_name varchar(50) DECLARE @au_date datetime DECLARE abc CURSOR FOR SELECT * FROM svepweb_nieuwsgroepen OPEN abc FETCH NEXT FROM abc INTO @au_id, @au_name WHILE (@@FETCH_STATUS = 0) BEGIN --- Get latest date for current board --- SELECT @au_date = MAX(datum) from svepweb_nieuwsgroepen_berichten WHERE boardId = @au_id --- Get latest post for current board --- SET ROWCOUNT 1 SELECT boardId, onderwerp, datum from svepweb_nieuwsgroepen_berichten where boardId = @au_id AND datum = @au_date --- Go to next board --- FETCH NEXT FROM abc INTO @au_id, @au_name END CLOSE abc DEALLOCATE abc |
Dit werkt als een zonnetje, ik krijg 7 recordsets met daarin 1 record, namelijk dat record dat het meest recent is voor elk board.
Maar ik wil geen 7 queries vanuit ASP moeten doen om dat voor elk board op te moeten halen en ik krijg dus nu 7 recordsets terug. Met UNION kan ik weinig en ik heb ook met views lopen klooien maar ik zit helemaal vast. Heeft iemand een (waarschijnlijk veel handiger) manier om per messageboard het meest recente item terug te geven in 1 recordset? Mijn dank is groot.