Ошибка с 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— это функция, которая возвращает первый ненулевой аргумент.