Подскажите как составить запрос - MySQL (219558)
Формулировка задачи:
Привет! Есть два таблицы:
*в первой вопросы во второй по три (иногда четыре) варианта ответа. Это тест.
Запрс перемешивал вопросы выводя в случайном порядке вопросы и варианты ответов тоже в случайном порядке. Пока вопросов было 10-20 все было хорошо, но сейчас вопросов больше 100 и необходимо ограничить их кол-во 25. Я понимаю что нужен подзапрос - но пробую разные варианты ничего не получается - то выводит 25 вопросов и по одному варианту ответов, то перемешивает все в кучу! Подскажите как составить запрос чтобы выбирало 25 вопросов в случайном порядке из первой таблицы и к ним варианты ответов из второй таблицы соответствующие вопросам. Хочется одним запросом, на стороне БД. Не хочется городить цикл PHP из 25 запросов к бд за ответами!
+-------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | question | varchar(255) | NO | | NULL | | | parent_test | int(11) | NO | | NULL | | +-------------+------------------+------+-----+---------+----------------+
+-----------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | answer | text | NO | | NULL | | | parent_question | int(10) unsigned | NO | | NULL | | | correct_answer | enum('0','1') | NO | | 0 | | +-----------------+------------------+------+-----+---------+----------------+
SELECT q.question, q.parent_test, a.id, a.answer, a.parent_question from questions q left join answers a on q.id = a.parent_question where q.parent_test=1 order by rand();
Решение задачи: «Подскажите как составить запрос»
textual
Листинг программы
SELECT q.question, q.parent_test, a.id, a.answer, a.parent_question from questions q left join answers a on q.id = a.parent_question where q.parent_test=1 and q.id in($id)order by rand();
Объяснение кода листинга программы
В данном коде выполняется запрос к базе данных, используя язык SQL. В запросе используются следующие действия:
- SELECT - выбор данных из таблицы.
- q.question, q.parent_test, a.id, a.answer, a.parent_question - выбор конкретных столбцов для вывода.
- FROM - указание источника данных, в данном случае таблицы questions и answers.
- LEFT JOIN - объединение данных из двух таблиц по общему столбцу.
- ON - указание условия для объединения строк из разных таблиц.
- WHERE - установка условия для выбора данных.
- q.parent_test=1 - выбираются только строки, где значение столбца parent_test равно 1.
- q.id in($id) - выбираются только строки, где значение столбца id входит в список, представленный в переменной $id.
- ORDER BY - сортировка результатов запроса по указанному столбцу.
- rand() - сортировка производится случайным образом. Список переменных и их значений:
- $id - переменная, содержащая список id для выборки.
- q.parent_test - столбец с тестами.
- q.id - столбец с идентификаторами вопросов.
- a.id - столбец с идентификаторами ответов.
- a.answer - столбец с самими ответами.
- a.parent_question - столбец с идентификаторами вопросов, к которым относятся ответы.
- q.parent_test=1 - условие для выбора тестов.
- q.id in($id) - условие для выбора вопросов по списку id.
- ORDER BY rand() - сортировка результатов запроса случайным образом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д