Answer the question
In order to leave comments, you need to log in
How to make nested data grouping by two columns?
It is necessary to form a grouped query on the quiz column and on the question column. That is, I want to achieve this result:
The following query gives the error "#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column":
SELECT `quizes`.`name` AS 'quiz', `questions`.`text` AS 'question', json_arrayagg(`options`.`text`) AS 'option' FROM `quizes`
JOIN `questions` ON `questions`.`quiz_id` = `quizes`.`id`
JOIN `options` ON `options`.`question_id` = `questions`.`id`
WHERE `quizes`.`link` = 'test-quiz'
GROUP BY 'quiz' LIMIT 0, 25
-- phpMyAdmin SQL Dump
-- version 4.8.5
-- https://www.phpmyadmin.net/
--
-- Хост: localhost
-- Время создания: Янв 28 2021 г., 15:09
-- Версия сервера: 8.0.13-4
-- Версия PHP: 7.2.24-0ubuntu0.18.04.7
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- База данных: `JWVsrFLxiw`
--
-- --------------------------------------------------------
--
-- Структура таблицы `answers`
--
CREATE TABLE `answers` (
`id` int(11) NOT NULL,
`quiz_id` int(11) NOT NULL,
`question_id` int(11) NOT NULL,
`option_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`name` varchar(32) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- --------------------------------------------------------
--
-- Структура таблицы `options`
--
CREATE TABLE `options` (
`id` int(11) NOT NULL,
`question_id` int(11) NOT NULL,
`text` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`correct` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Дамп данных таблицы `options`
--
INSERT INTO `options` (`id`, `question_id`, `text`, `correct`) VALUES
(1, 3, 'Вариант 1', 0),
(2, 3, 'Вариант 2', 1),
(3, 4, 'Вариант 1', 1),
(4, 4, 'Вариант 2', 0);
-- --------------------------------------------------------
--
-- Структура таблицы `questions`
--
CREATE TABLE `questions` (
`id` int(11) NOT NULL,
`quiz_id` int(11) NOT NULL,
`text` varchar(32) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Дамп данных таблицы `questions`
--
INSERT INTO `questions` (`id`, `quiz_id`, `text`) VALUES
(3, 4, 'Вопрос первый?'),
(4, 4, 'Вопрос второй?');
-- --------------------------------------------------------
--
-- Структура таблицы `quizes`
--
CREATE TABLE `quizes` (
`id` int(11) NOT NULL,
`link` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`creator` varchar(32) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Дамп данных таблицы `quizes`
--
INSERT INTO `quizes` (`id`, `link`, `name`, `creator`) VALUES
(4, 'test-quiz', 'Тестовый квиз', 'yhugoy');
-- --------------------------------------------------------
--
-- Структура таблицы `users`
--
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`login` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`token` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`avatar` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Дамп данных таблицы `users`
--
INSERT INTO `users` (`id`, `login`, `name`, `token`, `avatar`) VALUES
(1, 'podyganov-konstantin', 'Подыганов Константин', 'yhugoy', '');
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `answers`
--
ALTER TABLE `answers`
ADD PRIMARY KEY (`id`);
--
-- Индексы таблицы `options`
--
ALTER TABLE `options`
ADD PRIMARY KEY (`id`);
--
-- Индексы таблицы `questions`
--
ALTER TABLE `questions`
ADD PRIMARY KEY (`id`);
--
-- Индексы таблицы `quizes`
--
ALTER TABLE `quizes`
ADD PRIMARY KEY (`id`);
--
-- Индексы таблицы `users`
--
ALTER TABLE `users`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT для сохранённых таблиц
--
--
-- AUTO_INCREMENT для таблицы `answers`
--
ALTER TABLE `answers`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT для таблицы `options`
--
ALTER TABLE `options`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT для таблицы `questions`
--
ALTER TABLE `questions`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT для таблицы `quizes`
--
ALTER TABLE `quizes`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT для таблицы `users`
--
ALTER TABLE `users`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
COMMIT;
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question