Подскажите как составить запрос - MySQL (219558)

Узнай цену своей работы

Формулировка задачи:

Привет! Есть два таблицы:
+-------------+------------------+------+-----+---------+----------------+
| 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();
перемешивал вопросы выводя в случайном порядке вопросы и варианты ответов тоже в случайном порядке. Пока вопросов было 10-20 все было хорошо, но сейчас вопросов больше 100 и необходимо ограничить их кол-во 25. Я понимаю что нужен подзапрос - но пробую разные варианты ничего не получается - то выводит 25 вопросов и по одному варианту ответов, то перемешивает все в кучу! Подскажите как составить запрос чтобы выбирало 25 вопросов в случайном порядке из первой таблицы и к ним варианты ответов из второй таблицы соответствующие вопросам. Хочется одним запросом, на стороне БД. Не хочется городить цикл PHP из 25 запросов к бд за ответами!

Решение задачи: «Подскажите как составить запрос»

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. В запросе используются следующие действия:

  1. SELECT - выбор данных из таблицы.
  2. q.question, q.parent_test, a.id, a.answer, a.parent_question - выбор конкретных столбцов для вывода.
  3. FROM - указание источника данных, в данном случае таблицы questions и answers.
  4. LEFT JOIN - объединение данных из двух таблиц по общему столбцу.
  5. ON - указание условия для объединения строк из разных таблиц.
  6. WHERE - установка условия для выбора данных.
  7. q.parent_test=1 - выбираются только строки, где значение столбца parent_test равно 1.
  8. q.id in($id) - выбираются только строки, где значение столбца id входит в список, представленный в переменной $id.
  9. ORDER BY - сортировка результатов запроса по указанному столбцу.
  10. rand() - сортировка производится случайным образом. Список переменных и их значений:
  11. $id - переменная, содержащая список id для выборки.
  12. q.parent_test - столбец с тестами.
  13. q.id - столбец с идентификаторами вопросов.
  14. a.id - столбец с идентификаторами ответов.
  15. a.answer - столбец с самими ответами.
  16. a.parent_question - столбец с идентификаторами вопросов, к которым относятся ответы.
  17. q.parent_test=1 - условие для выбора тестов.
  18. q.id in($id) - условие для выбора вопросов по списку id.
  19. ORDER BY rand() - сортировка результатов запроса случайным образом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5