如何实现标签计数

时间:2010-01-23 07:56:49

标签: c# sql asp.net-mvc linq tagging

我的数据库中的标签如下所示:

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

都开放

4 个答案:

答案 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