Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка из 2 таблиц
 
 автор: Visavi   (06.02.2014 в 18:28)   письмо автору
 
 

Есть 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;


можно ли одним запросом получить все вопросы, и вопросы на которые уже ответил пользователь

  Ответить  
 
 автор: Valick   (06.02.2014 в 18:33)   письмо автору
 
   для: Visavi   (06.02.2014 в 18:28)
 

что-то на первый взгляд со структурой таблиц неладное у вас
вам надо получить вопросы на которые еще не оветил и вопросы на которые уже ответил одним запросом? в принципе можно, но нужно ли так извращатся?

  Ответить  
 
 автор: Visavi   (06.02.2014 в 18:41)   письмо автору
 
   для: Valick   (06.02.2014 в 18:33)
 

Ну можно не отдельно выводить вопросы просто при выборке выводить вопрос и id пользователя который ответил на вопрос

или может изменить структуру как-то

  Ответить  
 
 автор: Valick   (06.02.2014 в 18:47)   письмо автору
 
   для: Visavi   (06.02.2014 в 18:41)
 

>просто при выборке выводить вопрос и id пользователя
вас достаточно сложно понять :)
>или может изменить структуру как-то
покажите дампы всех таблиц относящихся к этому модулю
расскажите в общих чертах как производится ответ на вопрос (выбор из доступных вариантов, или ответ введенный пользователем)

  Ответить  
 
 автор: Visavi   (06.02.2014 в 19:30)   письмо автору
 
   для: 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 я там без проблем все сделаю

  Ответить  
 
 автор: Valick   (06.02.2014 в 19:38)   письмо автору
 
   для: Visavi   (06.02.2014 в 19:30)
 

хм, вам бы про нормализацию БД и связи почитать
например вот этого
4,четыре,four - быть не должно
во вторых, ответил пользователь на вопрос - это у вас есть, а правильно или нет, это у вас нигде не отражено или у вас user_id записывается только при правильном ответе?
в третих на каждую сущность необходимо выделять по таблице, а следовательно вопросы отдельно, ответы отдельно
я бы посоветовал немного изменить архитектуру БД

  Ответить  
 
 автор: Valick   (06.02.2014 в 19:46)   письмо автору
 
   для: 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;

  Ответить  
 
 автор: Visavi   (06.02.2014 в 19:53)   письмо автору
 
   для: Valick   (06.02.2014 в 19:46)
 

Да пользователь записывается только если ответил правильно
про нормализацию знаю, но думал для данной задачи и так сойдет

  Ответить  
 
 автор: Valick   (06.02.2014 в 20:06)   письмо автору
 
   для: 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;

итого три таблицы
сейчас набросаю запросы

  Ответить  
 
 автор: Valick   (06.02.2014 в 21:29)   письмо автору
 
   для: 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";

  Ответить  
 
 автор: Visavi   (07.02.2014 в 02:51)   письмо автору
 
   для: Valick   (06.02.2014 в 21:29)
 

Спасибо большое все работает

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования