Ошибка с group_concat - MySQL

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

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

Здравствуйте. Вернее, не ошибка, а явно что-то я не поняла. Вот запрос:
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, то я получаю такой рекордсет: Маша NULL NULL ела NULL кашу и NULL NULL суп Здесь все хорошо, запрос возвращает именно то, что нужно. Дальше я пытаюсь объединить это в правильную фразу "Маша ела кашу и суп", но получаю произвольный порядок, типа "кашу суп маша ела и". Такое впечатление, что при GROUP_CONCAT перестает учитываться Order by. Подскажите, пожалуйста, что надо исправить?

Решение задачи: «Ошибка с 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;

Объяснение кода листинга программы

  1. SELECT — это команда для выбора данных из базы данных.
  2. GROUP_CONCAT — это функция агрегирования, которая объединяет строки в одну строку с определенным разделителем.
  3. IFNULL — это функция, которая возвращает первый ненулевой аргумент.
  4. ott.Mword и ts.Mword — это поля из таблиц tbl_one и tbl_second, которые могут содержать строки.
  5. tg.Id_MWord — это поле из таблицы tbl_general, которое используется для соединения с таблицами tbl_one и tbl_second.
  6. SEPARATOR ' ' — это параметр функции GROUP_CONCAT, который указывает разделитель для объединенных строк.
  7. AS ex — это псевдоним для нового столбца, который будет создан в результирующем наборе данных.
  8. FROM tbl_general tg — это указание исходной таблицы для запроса.
  9. LEFT JOIN tbl_one ott ON ott.Id_Mword = tg.Id_MWord — это присоединение таблицы tbl_one к запросу с использованием условия равенства.
  10. LEFT JOIN tbl_second ts ON ts.Id_Mword = tg.Id_MWord — это присоединение таблицы tbl_second к запросу с использованием условия равенства.
  11. ORDER BY tg.Id — это указание порядка сортировки результирующего набора данных по полю Id из таблицы tbl_general.
  12. ' ' — это строка, которая используется в качестве разделителя для объединенных строк.
  13. ex — это псевдоним для нового столбца, который будет создан в результирующем наборе данных.
  14. tbl_one, tbl_second и tbl_general — это имена таблиц, которые используются в запросе.
  15. Id_MWord и Id_Mword — это имена полей, которые используются в запросе.
  16. Mword — это тип данных полей ott.Mword и ts.Mword, которые предполагаются строковыми.
  17. Id — это тип данных поля tg.Id, которое предполагается целочисленным.
  18. LEFT JOIN — это оператор, который объединяет две таблицы, включая все строки из левой таблицы и только совпадающие строки из правой таблицы.
  19. GROUP_CONCAT — это функция агрегирования, которая объединяет строки в одну строку с определенным разделителем.
  20. IFNULL — это функция, которая возвращает первый ненулевой аргумент.

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


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

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

9   голосов , оценка 3.889 из 5