0

3つのテーブルを作成しました

ここでは、特定の質問 (id) に関連するすべての question_tags と回答を取得したいと考えています。そのために必要な単一のクエリまたはストアド プロシージャ

create table questions(id varchar(100),title varchar(140),body varchar(2000),
primary key(id));

create table question_tags(id varchar(50),tag_name varchar(50),question_id varchar(100),
primary key(id),foreign key(question_id) references questions(id));


create table answers(id varchar(50),answer varchar(2000),question_id varchar(100),
primary key(id),foreign key(question_id) references questions(id));

および表の次のデータ

     mysql> select * from questions;
     +----+-------+-------------+
     | id | title | body        |
     +----+-------+-------------+
     | 1  | a     | hello       |
     | 2  | b     | hii         |
     | 3  | c     | bye         |
     | 4  | d     | how are you |
     +----+-------+-------------+
     4 rows in set (0.03 sec)

     mysql> select * from question_tags
     +----+----------+-------------+
     | id | tag_name | question_id |
     +----+----------+-------------+
     | t1 | java     | 1           |
     | t2 | mysql    | 1           |
     | t3 | jquery   | 1           |
     +----+----------+-------------+
     3 rows in set (0.00 sec)

     mysql> select * from answers;
     +----+-----------+-------------+
     | id | answer    | question_id |
     +----+-----------+-------------+
     | a1 | good      | 1           |
     | a2 | excellent | 1           |
     | a3 | ok        | 1           |
     +----+-----------+-------------+
     3 rows in set (0.00 sec)
4

2 に答える 2

1

JOIN [ON] ステートメントを検索すると思います。Tablelayout の場合、次のようになります。

SELECT `question_tags`.*, `answers`.* 
FROM `questions`
   JOIN  `answers` 
        ON `questions`.`id` = `answers`.`question_id`
   JOIN `question_tags` 
        ON `questions`.`id` = `question_tags`.`question_id`
WHERE `questions`.`id` = {YOUR_ID}

または、質問 ID、回答、タグのみ:

SELECT `questions`.`id` AS `question_id`, 
         `question_tags`.`tag_name`, 
         `answers`.`answer` 
FROM `questions`
   JOIN  `answers` 
        ON `questions`.`id` = `answers`.`question_id`
   JOIN `question_tags` 
        ON `questions`.`id` = `question_tags`.`question_id`
WHERE `questions`.`id` = 0

編集: そして、1行のすべてについて:

SELECT  `questions`.`id` AS  `question_id` ,
(
    SELECT GROUP_CONCAT(  `question_tags`.`tag_name` SEPARATOR ';') 
    FROM  `question_tags` 
    WHERE  `question_id` =0
) AS  `Tags` ,
(
    SELECT GROUP_CONCAT(  `answers`.`answer` SEPARATOR ';' ) 
    FROM  `answers` 
    WHERE  `question_id` =0
) AS  `Answers` 
FROM  `questions` 
WHERE  `questions`.`id` =0

これは最善の方法ではないことに注意してください。MySQL の SP に慣れていないため、ストアド プロシージャを提供できません。私の意見では、目的の形式をテーブルとして選択/返す/表示する方法はありません。

于 2013-02-20T11:18:20.617 に答える
-1

クエリは次のとおりです。

select * from questions join question_tags on (questions.id = question_tags.question_id) join answers on (questions.id=answers.question_id);

ここにフィドルがあります。質問とともに提供していただけると、大変助かります。
mySQL の命名規則 (テーブルは署名付き) とキー参照 (私はあなたのものをintegers に変更しましたが、変更することもできます) について読んでくださいauto_increment

于 2013-02-20T11:19:13.057 に答える