0

我有一个包含三个表的数据库:问题、标签和问题标签。这是它们的设置方式:

---------
questions
---------
Question_ID
Question_Title
Content

----
tags
----
Tag_ID
Tag_Title

--------------
questions_tags
--------------
Question_ID
Tag_ID

在我的程序中,我使用中继器来显示 Question_Title 和 Content。我希望能够重复 Tag_Title(对于某个问题也有很多标签。

本质上,我正在尝试重新创建类似于 stackoverflow 的问题块的东西(带有问题、标签、视图等)。

假设我有一个带有 5 个标签的问题。该问题连同一个 ID(自动增量)和问题的内容一起被插入到问题表中。然后,使用用户附加到问题的任何标签,这些标签将被放入带有关联 ID 的标签表中。然后 questions_tags 表将匹配 Question_ID 和 Tag_ID。所以它可能是这样的:

Question_ID | Tag_ID
    1       |    3
    1       |    4

所以问题 1 在这个例子中有 2 个两个标签。那么我怎样才能让复读器重复问题表中的每个问题,然后重复与该问题关联的每个标签?

到目前为止,我已经创建了一个内部连接问题、标签和 questions_tags 的视图,但重复它只会重复一个问题不止一次......

这是我为加入所做的:

SELECT q.Question_ID, qt.Tag_ID, t.Tag_Title, q.Question_Title, q.Content, q.Views
FROM questions q
INNER JOIN questions_tags qt
ON q.Question_ID = qt.Question_ID
Inner JOIN tags t
ON qt.Tag_ID = t.Tag_ID

或者,换句话说,我如何使用我的连接创建一个视图,以便它创建这样的表?:

Question_ID | Tag1 | Tag2 | Tag1_Title | Tag2_Title | Question_Title | Content
4

2 回答 2

0

我从您的问题中了解到的是,您正试图使问题和标签之间的关系变平。如果您使用的是 mysql(假设您已经用 mysql 标记了您的问题),那么您可以使用 mysql 的GROUP_CONCAT函数。像下面这样的东西应该会给你你正在寻找的东西。

SELECT q.Question_ID, q.Question_Title, GROUP_CONCAT(t.Tag_Title SEPARATOR ', ') AS 'Tags'
FROM questions q
INNER JOIN questions_tags qt
ON q.Question_ID = qt.Question_ID
INNER JOIN tags t
ON qt.Tag_ID = t.Tag_ID
GROUP BY q.Question_ID, q.q.Question_Title

输出应如下所示:

id     title    tags
1      quest1   tag1, tag2, tag3
2      myquest  anotherTag, anotherTag2
于 2012-07-15T23:36:50.140 回答
0

因此,在查看了所有各种建议之后,我决定采用有能力的技术将数据加载到结构化类层次结构中的答案。我为问题和标签创建了一个类,问题类的参数之一是标签列表。通过这条路线,我避免了需要创建任何视图,并且能够使用我的问题中最初陈述的表格。

谢谢大家的帮助。

于 2012-07-16T02:49:56.950 回答