|
|
|
| Есть 2 таблицы
-- Структура таблицы `questions`
CREATE TABLE IF NOT EXISTS `questions` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`question` varchar(255) NOT NULL,
`answer` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- Структура таблицы `answers`
CREATE TABLE IF NOT EXISTS `answers` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`question_id` int(11) unsigned NOT NULL,
`user_id` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
можно ли одним запросом получить все вопросы, и вопросы на которые уже ответил пользователь | |
|
|
|
|
|
|
|
для: Visavi
(06.02.2014 в 18:28)
| | что-то на первый взгляд со структурой таблиц неладное у вас
вам надо получить вопросы на которые еще не оветил и вопросы на которые уже ответил одним запросом? в принципе можно, но нужно ли так извращатся? | |
|
|
|
|
|
|
|
для: Valick
(06.02.2014 в 18:33)
| | Ну можно не отдельно выводить вопросы просто при выборке выводить вопрос и id пользователя который ответил на вопрос
или может изменить структуру как-то | |
|
|
|
|
|
|
|
для: Visavi
(06.02.2014 в 18:41)
| | >просто при выборке выводить вопрос и id пользователя
вас достаточно сложно понять :)
>или может изменить структуру как-то
покажите дампы всех таблиц относящихся к этому модулю
расскажите в общих чертах как производится ответ на вопрос (выбор из доступных вариантов, или ответ введенный пользователем) | |
|
|
|
|
|
|
|
для: Valick
(06.02.2014 в 18:47)
| |
INSERT INTO `answers` (`id`, `question_id`, `user_id`) VALUES
(1, 1, 2),
(2, 1, 5),
(3, 4, 3),
(4, 1, 1);
INSERT INTO `questions` (`id`, `question`, `answer`) VALUES
(1, 'Сколько будет 2 + 2?', '4,четыре,four'),
(3, 'Сколько будет 3 + 3?', '6,шесть,six'),
(4, 'Сколько будет 4 + 4?', '8,восемь,eight');
|
Есть к примеру пользователь с id = 1
он входит на сайт и делает запрос
выводится в цикле список вопросов и рядом нужно сделать отвечал ли он на этот вопрос
то есть нужен как бы подзапрос есть ли в таблице answers с таким-то id, id пользователя если есть тот как-то показать
мне главное sql запрос на php я там без проблем все сделаю | |
|
|
|
|
|
|
|
для: Visavi
(06.02.2014 в 19:30)
| | хм, вам бы про нормализацию БД и связи почитать
например вот этого
4,четыре,four - быть не должно
во вторых, ответил пользователь на вопрос - это у вас есть, а правильно или нет, это у вас нигде не отражено или у вас user_id записывается только при правильном ответе?
в третих на каждую сущность необходимо выделять по таблице, а следовательно вопросы отдельно, ответы отдельно
я бы посоветовал немного изменить архитектуру БД | |
|
|
|
|
|
|
|
для: Visavi
(06.02.2014 в 19:30)
| | CREATE TABLE IF NOT EXISTS `questions` (
`q-id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`question` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `answers` (
`a-id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`q-id` int(11) NOT NULL,
`answer` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; | |
|
|
|
|
|
|
|
для: Valick
(06.02.2014 в 19:46)
| | Да пользователь записывается только если ответил правильно
про нормализацию знаю, но думал для данной задачи и так сойдет | |
|
|
|
|
|
|
|
для: Visavi
(06.02.2014 в 19:53)
| | CREATE TABLE IF NOT EXISTS `uaq` (
`u-id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`q-id` int(11) unsigned NOT NULL,
`a-id` int(11) unsigned NOT NULL,
`user_id` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
итого три таблицы
сейчас набросаю запросы | |
|
|
|
|
|
|
|
для: Visavi
(06.02.2014 в 19:53)
| |
CREATE TABLE IF NOT EXISTS `answers` (
`a-id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`q-id` int(11) unsigned NOT NULL,
`answer` varchar(255) NOT NULL,
PRIMARY KEY (`a-id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
--
-- Дамп данных таблицы `answers`
--
INSERT INTO `answers` (`a-id`, `q-id`, `answer`) VALUES
(1, 1, '4'),
(2, 3, '6'),
(3, 4, '8'),
(4, 1, 'четыре'),
(5, 3, 'шесть'),
(6, 4, 'восемь'),
(7, 1, 'four'),
(8, 3, 'six'),
(9, 4, 'eight');
|
запрос на проверку правильности ответа и занесение данных в таблицу uaq
$query="INSERT INTO `uaq` (`q-id`,`a-id`,`user_id`)
SELECT `q-id`,`a-id`, $user_id
FROM `answers`
WHERE `q-id` = $quest_id AND `answer` = '$answer'";
|
если ответ правильный то в таблице появится запись
запрос на выборку всех вопросов и отвеченых определенным пользователем
$query="SELECT q.*,u.`a-id`,u.`user_id`
FROM `questions` q LEFT JOIN `uaq` u ON q.`q-id`=u.`q-id` AND `user_id` = $user_id";
|
| |
|
|
|
|
|
|
|
для: Valick
(06.02.2014 в 21:29)
| | Спасибо большое все работает | |
|
|
|
|