Ошибка с group_concat - MySQL
Формулировка задачи:
Здравствуйте. Вернее, не ошибка, а явно что-то я не поняла.
Вот запрос:
Если убрать GROUP_CONCAT, то я получаю такой рекордсет:
Маша NULL
NULL ела
NULL кашу
и NULL
NULL суп
Здесь все хорошо, запрос возвращает именно то, что нужно.
Дальше я пытаюсь объединить это в правильную фразу "Маша ела кашу и суп", но получаю произвольный порядок, типа "кашу суп маша ела и". Такое впечатление, что при GROUP_CONCAT перестает учитываться Order by. Подскажите, пожалуйста, что надо исправить?
SELECT GROUP_CONCAT(IFNULL(ott.Mword, ''), IFNULL(ts.Mword, '') SEPARATOR ' ') AS ex FROM tbl_general tg LEFT JOIN tbl_one ott ON ott.Id_Mword = tg.Id_MWord LEFT JOIN tbl_second ts ON ts.Id_Mword = tg.Id_MWord ORDER BY tg.Id;
Решение задачи: «Ошибка с group_concat»
textual
Листинг программы
SELECT GROUP_CONCAT(IFNULL(ott.Mword, ''), IFNULL(ts.Mword, '') ]ORDER BY tg.Id SEPARATOR ' ') AS ex FROM tbl_general tg LEFT JOIN tbl_one ott ON ott.Id_Mword = tg.Id_MWord LEFT JOIN tbl_second ts ON ts.Id_Mword = tg.Id_MWord;
Объяснение кода листинга программы
SELECT
— это команда для выбора данных из базы данных.GROUP_CONCAT
— это функция агрегирования, которая объединяет строки в одну строку с определенным разделителем.IFNULL
— это функция, которая возвращает первый ненулевой аргумент.ott.Mword
иts.Mword
— это поля из таблицtbl_one
иtbl_second
, которые могут содержать строки.tg.Id_MWord
— это поле из таблицыtbl_general
, которое используется для соединения с таблицамиtbl_one
иtbl_second
.SEPARATOR ' '
— это параметр функцииGROUP_CONCAT
, который указывает разделитель для объединенных строк.AS ex
— это псевдоним для нового столбца, который будет создан в результирующем наборе данных.FROM tbl_general tg
— это указание исходной таблицы для запроса.LEFT JOIN tbl_one ott ON ott.Id_Mword = tg.Id_MWord
— это присоединение таблицыtbl_one
к запросу с использованием условия равенства.LEFT JOIN tbl_second ts ON ts.Id_Mword = tg.Id_MWord
— это присоединение таблицыtbl_second
к запросу с использованием условия равенства.ORDER BY tg.Id
— это указание порядка сортировки результирующего набора данных по полюId
из таблицыtbl_general
.' '
— это строка, которая используется в качестве разделителя для объединенных строк.ex
— это псевдоним для нового столбца, который будет создан в результирующем наборе данных.tbl_one
,tbl_second
иtbl_general
— это имена таблиц, которые используются в запросе.Id_MWord
иId_Mword
— это имена полей, которые используются в запросе.Mword
— это тип данных полейott.Mword
иts.Mword
, которые предполагаются строковыми.Id
— это тип данных поляtg.Id
, которое предполагается целочисленным.LEFT JOIN
— это оператор, который объединяет две таблицы, включая все строки из левой таблицы и только совпадающие строки из правой таблицы.GROUP_CONCAT
— это функция агрегирования, которая объединяет строки в одну строку с определенным разделителем.IFNULL
— это функция, которая возвращает первый ненулевой аргумент.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д