您首先必须将您的表格分成 4 个,如下所示:
用户:id - 姓名
问题:id - 文本
答案:id - fk_question - 文本
用户答案: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