我的数据库中的标签如下所示:
Table: Item
Columns: ItemID, Title, Content
Table: Tag
Columns: TagID, Title
Table: ItemTag
Columns: ItemID, TagID
//example -- this is the right sidebar of stackoverflow
c# × 59279
sql × 14885
asp.net-mvc × 9123
linq × 4337
tags × 339
如果我想知道每个标签的数量,例如stackoverflow如何计算其标签,我该怎么做?我会执行什么样的查询。我对常规sql和linq
都开放答案 0 :(得分:4)
在表格Tag中添加另一列作为计数器。当您在项目中添加或删除标记时,您更新计数器(换句话说,当在Itemtag上添加一行时,在Tag表上增加计数器,当删除时递减计数器)
将标签添加到项目:
INSERT INTO Itemtag (itemid,tagid) VALUES ('$itemid','$tagid');
UPDATE Tag SET counter=counter+1 WHERE tagid='$tagid';
从商品
中删除代码DELETE FROM Itemtag WHERE itemid='$itemid' AND tagid='$tagid';
UPDATE Tag SET counter=counter-1 WHERE tagid='$tagid';
使用计数器
检索项目标签SELECT t.title, t.counter FROM Itemtag AS it JOIN Tag AS t ON t.idtag=it.tagid
WHERE it.itemid='$itemid'
答案 1 :(得分:3)
select t.Title, count(it.TagID) as TagCount
from Tag t
inner join ItemTag it on t.TagID = it.TagID
inner join Item i on it.ItemID = i.ItemID
where i.ItemID = @currentItemID -- optional, if you only want current page
group by t.Title
答案 2 :(得分:0)
您可以使用Item
中的其他列来存储标记计数,并在添加或删除标记时进行同步。
答案 3 :(得分:0)
SELECT title, count(*) FROM tag
JOIN itemtag ON itemtag.tagid = tag.tagid
GROUP BY title