Мне разработали мои теги как это в моей базе данных:
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 увеличивать счетчик на таблице тегов, при удалении уменьшения счетчика)
Добавить тег на элемент:
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'
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