最初に、次のようにテーブルを 4 つに分割する必要があります。
ユーザー: ID - 名前
質問: id - テキスト
答え: id - fk_question - テキスト
User_answers: id - fk_user - fk_question - fk_answer
あなたのための私の輸出:
CREATE TABLE IF NOT EXISTS `answer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fk_question` int(11) NOT NULL,
`text` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
INSERT INTO `answer` (`id`, `fk_question`, `text`) VALUES
(1, 1, 'it is 3'),
(2, 1, 'it is 2'),
(3, 1, 'it is 5');
CREATE TABLE IF NOT EXISTS `question` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
INSERT INTO `question` (`id`, `text`) VALUES
(1, 'what is 1 + 1');
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
INSERT INTO `users` (`id`, `name`) VALUES
(1, 'pipo'),
(2, 'kees'),
(3, 'jan'),
(4, 'hessel'),
(5, 'geke'),
(6, 'daan'),
(7, 'ray'),
(8, 'jelle'),
(9, 'klaas'),
(10, 'berent');
CREATE TABLE IF NOT EXISTS `users_answers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fk_user` int(11) NOT NULL,
`fk_question` int(11) NOT NULL,
`fk_answer` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
INSERT INTO `users_answers` (`id`, `fk_user`, `fk_question`, `fk_answer`) VALUES
(1, 2, 1, 2),
(2, 4, 1, 3);
次に、データを取得するだけで、どの列名が 1 に設定されているかを確認する必要がなく、非常に簡単です。このようにして、3つ以上の答えが存在する可能性があります。実際、その変数は次のとおりです。
SELECT q.`id` , u.`id` , a.`id`
FROM `users_answers` ua
INNER JOIN `users` u ON ua.`fk_user` = u.`id`
INNER JOIN `question` q ON ua.`fk_question` = q.`id`
INNER JOIN `answer` a ON ua.`fk_answer` = a.`id`
WHERE u.`id` =2
戻ります
question user answer
1 2 2
しかし、私はこれを直接使用します:
SELECT q.`text` AS `question` , u.`name` AS `user` , a.`text` AS `answer`
FROM `users_answers` ua
INNER JOIN `users` u ON ua.`fk_user` = u.`id`
INNER JOIN `question` q ON ua.`fk_question` = q.`id`
INNER JOIN `answer` a ON ua.`fk_answer` = a.`id`
WHERE u.`id` =2
AND q.`id` =1
戻り値:
question user answer
what is 1 + 1 kees it is 2