我有一个包含三个表的数据库:questions,tags和questions_tags。这就是它们的设置方式:
---------
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在这个例子中有两个标签。 那么如何让转发器重复问题表中的每个问题,然后重复与该问题相关的每个标签?
到目前为止,我已经创建了一个内部连接问题,标签和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
答案 0 :(得分: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
答案 1 :(得分:0)
因此,在审查了所有各种建议之后,我决定使用competent_tech的答案将数据加载到结构化的类层次结构中。我已经为问题和标签创建了一个类,而问题类的一个参数是标签列表。通过这条路线,我避免了需要创建任何视图,并且能够使用我在问题中最初陈述的表格。
谢谢大家的帮助。