让我们以stackoverflow为例:
发表
Postid Title Mess
--------------------------------------------------
1 Title1 This is a question
2 Title2 This is a question1
3 Title3 This is a question2
4 Title4 This is a question3
5 Title5 This is a question4
6 Title6 This is a question5
代码
TagId PostId Name
-----------------------------
1 1 Tag1
2 1 Tag2
3 1 Tag3
4 1 Tag4
5 2 Tag5
6 3 Tag6
7 4 Tag7
8 5 Tag8
9 6 Tag9
10 3 Tag10
在这个设计中,我如何在一个查询中获得所有关联标签的问题。这有可能吗?
*的 修改 *
select t.*, p.* from Tags t
join post p on t.postid=p.postid
这样的东西会给我每个问题的所有标签。但我不认为这是有效的。你怎么想。
答案 0 :(得分:1)
我认为你的榜样很弱。您不应该在用于加入帖子和标签的表格中添加标签名称。
您应该拥有以下表格:
如果您不这样做,那么当2个帖子具有相同的标签时,您将拥有许多相同的标签名称,您看到了吗?
现在,为了查询这些表并获得关联标签的所有问题,您应该执行以下操作:
select * from posts p
join posts_tags pt on p.postId = pt.postId
join tags on pt.tagId = t.tagId
您可以说效率较低,但您不在考虑示例中的数据重复,这可能会导致严重错误。