0

question、tags、questions_tags の 3 つのテーブルを持つデータベースがあります。設定方法は次のとおりです。

---------
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 つのタグがあります。では、リピーターに質問テーブル内の各質問を繰り返してもらい、その質問に関連付けられた各タグを繰り返すにはどうすればよいでしょうか?

これまでに質問、タグ、および question_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

そのため、さまざまな提案をすべて確認した後、構造化されたクラス階層にデータをロードするという competent_tech の回答を使用することにしました。質問とタグのクラスを作成しました。質問クラスのパラメーターの 1 つはタグのリストです。このルートに進むことで、ビューを作成する必要がなくなり、質問で最初に述べたテーブルを使用できるようになりました。

助けてくれてありがとう。

于 2012-07-16T02:49:56.950 に答える
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 に答える