Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何实现标签计数_C#_Sql_Asp.net Mvc_Linq_Tagging - Fatal编程技术网

C# 如何实现标签计数

C# 如何实现标签计数,c#,sql,asp.net-mvc,linq,tagging,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

我的数据库中的标签设计如下:

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都持开放态度

您可以使用
中的另一列存储标记计数,并在添加或删除标记时将其同步。

在表标记中添加另一列作为计数器。当您从项目中添加或删除标记时,您会更新计数器(换句话说,当在Itemtag上添加一行时,会增加标记表上的计数器;当删除时,会减少计数器)

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
SELECT title, count(*) FROM tag
JOIN itemtag ON itemtag.tagid = tag.tagid
GROUP BY title
将标记添加到项目:

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'

桌子的关系是什么?很好!如果我有成千上万的帖子和标签,这会对数据库造成很大影响吗?当每个表的行数超过10行时,指望每个查询都会毁掉数据库Angelbit发布了最好的解决方案。实际上我同意Angelbit的方法更好。。。这与大型分布式数据库(如BigTable)建议处理项目计数报告的方式相同。我只是想写下您要求的查询。:)