我的数据库中有这样的标签:0 k5 r6 W# c( G7 @! S! o
Table: Item 3 h4 ?+ n; [5 w
Columns: ItemID, Title, Content+ x" }0 r8 C$ w- E% p3 |" P J0 O8 x
Table: Tag % G S. J5 p: f8 w/ _* {; j9 sColumns: TagID, Title m4 o, }( O5 X7 `! q: A& S; pTable: ItemTag ) [) o) R0 z4 U7 B/ IColumns: ItemID, TagID ) E# _( m3 x* w: b- G& d ) A1 u' H% J8 |9 A0 @* J6 F( N//example -- this is the right sidebar of stackoverflow / a$ ~0 Z' l* W9 l3 p& ?c# 脳 592799 B& V! W* y# ?6 g+ f \
sql 脳 14885- X: r W6 U: t; |) C) ~
asp.net-mvc 脳 9123 8 Q5 P5 D5 ?4 b, r9 j6 Blinq 脳 4337 ; J$ v0 d8 F5 h3 A2 r; itags 脳 339+ Q! N( S8 `7 w
如果我想知道每个标签的数量,例如stackoverflow如何计算他们的标签,我该怎么做?我将执行哪种查询。我对常规sql和linq都开放 - s* H* v. q5 O+ V+ z- O( j0 c) X ( _, }# }9 U, A0 e! a3 G% E解决方案:7 v7 z' e/ v! f+ @5 K2 R( V
1 v& D+ i1 u8 M3 h; M1 y& Y& D u2 d" V+ ?8 A
- {/ ], y! F8 x3 e+ c7 G
在表格标签中添加另一列作为计数器。在项目中添加或删除标签时,您会更新计数器(换句话说,在Itemtag上添加一行时,在Tag表上增加计数器,而在删除时减少计数器)0 t# E- |: ]3 T. a: ^8 Z
将标签添加到项目: 6 F1 s, K" p; kINSERT INTO Itemtag (itemid,tagid) VALUES ('$itemid','$tagid');0 [1 Y% s z0 X. P
UPDATE Tag SET counter=counter+1 WHERE tagid='$tagid'; ! G* `2 Z# E8 s4 G0 H. e) ^9 P* @从项目中删除标签 ) Q8 z3 h l+ [% M$ C# y) A) kDELETE FROM Itemtag WHERE itemid='$itemid' AND tagid='$tagid'; 8 P4 O2 A. ]7 W1 q' J2 aUPDATE Tag SET counter=counter-1 WHERE tagid='$tagid';0 }0 X8 {7 t: G6 D X
使用计数器检索商品标签3 q1 o3 ] P: e, ?, b4 h2 b
SELECT t.title, t.counter FROM Itemtag AS it JOIN Tag AS t ON t.idtag=it.tagid 7 P6 d' X/ P, |! v; x
WHERE it.itemid='$itemid'