7

私のデータベースには、次のようにタグが設定されています。

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

4 に答える 4

4

カウンターとして機能する別の列をテーブルタグに追加します。アイテムにタグを追加または削除するときは、カウンターを更新します(つまり、Itemtagに行を追加するときは、タグテーブルのカウンターをインクリメントし、削除するときは、カウンターをデクリメントします)

アイテムにタグを追加します。

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'
于 2010-01-23T09:42:40.847 に答える
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
于 2010-01-23T08:48:36.503 に答える
0

の別の列を使用しItemてタグ数を保存し、タグを追加または削除するときに同期することができます。

于 2010-01-23T08:50:40.883 に答える
0
SELECT title, count(*) FROM tag
JOIN itemtag ON itemtag.tagid = tag.tagid
GROUP BY title
于 2010-01-23T09:04:44.863 に答える