Så här?
select t.tagid, t.tag, iif(p.postid = <my_special_number>, 1, 0) as tagcount
from tag t inner join tagpost p ...
10 svar · 441 visningar · startad av voigtann1
Hej,
jag försökte lösa ett problem som jag tyckte kändes enkel från början, men fastnade längst vägen.
Jag har en access databas med följande struktur:
tag
tagpost
Jag vill få ut allt ifrån tag men även en count där det är 1 eller 0 om PostId är ett specifikt tal
PostId = 1 så kanske vi har TagId 1 och 2, då vill jag få ut ett resultat som säger att:
tag.TagId
tag.Tag
TagCount(?) (1/0)
Gå detta att göra med access?
Så här?
select t.tagid, t.tag, iif(p.postid = <my_special_number>, 1, 0) as tagcount
from tag t inner join tagpost p ...
Så här?
select t.tagid, t.tag, iif(p.postid = <my_special_number>, 1, 0) as tagcount
from tag t inner join tagpost p ...
Se där, nästan helt korrekt, verkar dock för de där iif-frågan stämmer så bli det 1 men den kör även en 0, så jag få dubbletter:
TagId TagName tagcount
1 Tag1 0
1 Tag1 1
2 Tag2 0
2 Tag2 1
3 Tag3 0
4 Tag4 0
Dock körde jag en LEFT JOIN, då om jag kör en vanlig join så få jag bara ut tag1 och tag2 två gånger. Kan bero på att man har andra idn än bara <my_special_number> i tagpost tabellen(?)
De två första raderna i resultatet innebär att tagid = 1 är kopplad till två poster i tagposttabellen: en av posterna har postid = <my_special_number> och den andra posten har postid = <något_annat>.
Kör du en left join enligt "tag left join tagpost" så får du ut taggar som inte är kopplade till poster. Med en inner join får du bara ut taggar som har en postkoppling. Sedan kanske du även har med något filter i where-satsen?
SELECT t.TagId, t.TagName, iif(p.BlogId = 24, 1, 0) as tagcount
FROM Tag AS t inner join PostsTag AS p ON p.TagId = t.TagId;
Och få resultatet:
TagId TagName tagcount
1 Tag1 0
1 Tag1 1
2 Tag2 0
2 Tag2 1
Men jag ha 4st "TagName"
Det önskade resultat jag vill ha är
TagId TagName tagcount
1 Tag1 1
2 Tag2 1
3 Tag3 0
4 Tag4 0
TagCount kan också vara null, bara att jag vet att om taggen finns med eller inte för presentation
Aha :)
Blir detta bättre månne:
SELECT
t.TagId, t.TagName, iif(p.BlogId is null, 0, 1) as tagcount
FROM
Tag AS t left join PostsTag AS p
ON
p.TagId = t.TagId and p.BlogId = 24
Vet inte om Access faktiskt klarar av COUNT och GROUP BY, men vad sägs om...
SELECT t.TagId, t.TagName, COUNT(p.BlogId) AS tagcount
FROM Tag AS t
LEFT JOIN PostsTag AS p ON p.TagId = t.TagId AND p.BlogId = 24
GROUP BY t.TagId
Det allra bästa sättet vore dock att cacha hur många gånger en tag används i Tag-tabellen, för prestandans skull. Det beror ju dock på tabellens storlek och antalet besökare om det är värt besväret.
Usch så trög jag är, fungera kanon
båda frågorna fungera från nitro2k01 och Peter S
Det allra bästa sättet vore dock att cacha hur många gånger en tag används i Tag-tabellen, för prestandans skull. Det beror ju dock på tabellens storlek och antalet besökare om det är värt besväret.
Det är i admin jag vill lista alla taggar och se vilka som är markerade på en specifikt tråd, är inte intresserad över hur många gånger en tagg har använts (än) men det har jag i åtanke redan ;)