MySQL - проблема с SELECT & GROUP BY - PullRequest
0 голосов
/ 28 ноября 2018

Здравствуйте, замечательное сообщество,

У меня есть базовая конфигурация MySQL / PHP с этой БД:

  • Таблица страниц
  • Таблица тегов
  • Pages_Tags Table

Запрос:

SELECT *, GROUP_CONCAT('tags_name')
FROM pages 
LEFT JOIN pages_tags ON pages_tags.pages_id = pages.pages_id
LEFT JOIN tags ON tags.tags_id = pages_tags.tags_id 
GROUP BY pages_tags.pages_id;

, и у меня есть следующая ошибка:

"Expression #1 of SELECT list is not in GROUP BY clause and contains
 nonaggregated column this is incompatible with sql_mode=only_full_group_by"

Итак, я провел много исследований, и кажется, что тамЕсть 2 решения:

1 / Чтобы изменить режим SQL 2 / Чтобы иметь один и тот же столбец в SELECT & GROUP BY.

Оба решения кажутся плохими.Первый, потому что я не хочу менять конфигурацию по умолчанию, а второй - безумие, мне нужно много столбцов в SELECT, а не только GROUP BY.Особенно, если запрос более сложный с гораздо большим количеством левых соединений.Мне нужно показать все тезисы информации.

Есть ли у вас какие-либо решения?Альтернатива с другими методами?Я открыт для всего;)

Спасибо большое !!

1 Ответ

0 голосов
/ 28 ноября 2018

начиная с mysql 5.7 вы можете использовать столбец в select, не участвующий в функции агрегации и не упомянутый в выражении group by, поэтому вам не следует использовать * (все) для столбца, но добавить имя столбца explict в select и упомянуть столбец в selectне участвует в функции агрегирования в группе по

    SELECT `pages_tags`.`pages_id`, GROUP_CONCAT('tags_name')
    FROM `pages` 
    LEFT JOIN `pages_tags` ON `pages_tags`.`pages_id` = `pages`.`pages_id` 
    LEFT JOIN `tags` ON `tags`.`tags_id` = `pages_tags`.`tags_id` 
    GROUP BY `pages_tags`.`pages_id`
...