Hejsa,
Jeg har et problem med følgende tabel, som skal repræsentere et meget
simpelt forum-system. Bemærk at der findes flere forskellige forums -
hver med sit eget bbsid.
CREATE TABLE [Bulletin] (
[BulletinID] [int] IDENTITY (1, 1) NOT NULL ,
[BBSID] [int] NULL ,
[Posted] [datetime] NULL ,
[authorID] [int] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Bemærk at overflødige felter er fjernet.
Jeg forsøger at lave en oversigt over de sidste indlæg i de forskellige
forums (dvs. unikt BBSID), hvilket kunne være fint at kunne gøre uden
skyde N+1 kald afsted mod DB. Jeg er lidt ad vejen - men det ser
alligevel ikke for godt ud, da jeg ikke får den primære nøgle med:
SELECT BBSID, MAX(Posted) AS Posted FROM Bulletin GROUP BY BBSID
Man kan selvf. lave følgende grimme hack, hvilket jeg absolut ikke er
glad for:
SELECT * FROM
(SELECT BBSID, MAX(Posted) AS Posted FROM Bulletin GROUP BY BBSID)
BulletinMax
INNER JOIN
Bulletin
ON BulletinMax.BBSID = Bulletin.ID AND BulletinMax.Posted = Bulletin.Posted
Så vidt jeg kan se mine DB-litteratur, så tillader GROUPING ikke at
medtage flere felter end 2: det som der grupperes på samt det felt der
aggregeres over - også selvom der er tale om MAX/MIN. Jeg forstår ikke
helt den begrundelsen for dette (det giver selvf. ikke mening med
SUM/COUNT/etc). Anyone?
Er mine eneste muligheder virkeligt, enten at
1) lade tuplen (BBSID, Posted) være PRIMARY KEY
2) kalde min DB N+1 gange?
Anon
|