projects.* FROM users
join user_project on users.id = user_projects.user
join projects on user_projects.project = projects.id
group by projects.id, users.id;
Такой запрос работает, но проблема с ним в том, что если один project имеет несколько users, то он будет в выборке ровно столько раз, сколько users имеют с ним связь.
Не подскажете, как будет выглядеть аналогичный запрос, который делает почти то же самое, но без дублирования строк проектов?
При этом в столбцах выборки, относящихся к users, подойдут данные любого юзера. Можно ли сделать это, не трогая настройку sql_mode=only_full_group_by?
в теории можете посмотреть GROUP_CONCAT и сложить все проекты в одну строку
не совсем понятно что вам в итоге надо, приведите в виде условной таблицы небольшой пример типо " вот 3-4 записи в проектах вот 5-6 записей таблице юзеров хочу получить вот такую табличку "
или юзеров в одну строку ) в итоге будет по одной строке на каждый проект и в одном поле все юзеры через запитую ) смотря что нужно )
я просто предположил самый вероятный вариант, что хотят посмотреть всех юзеров и какие у них проекты :)
Допустим, в таблице users у нас есть Василий Пупкин и Джон Смит, которые связаны с одним проектом. Если выполнить вышеуказанный мной запрос, то один проект появится в результате для каждого юзера. Я хочу в итоге получить уникальный список проектов, а что будет в полях выборки по юзерам - не имеет значения, т.к. в данном случае они равнозначны, но нам бы хотелось получить имя хоть кого-нибудь с этого проекта)🙈
Так не надо юзера в SELECT писать, если он не нужен
Более логичный кейс придумал: Предположим, у нас есть блог на каком-нибудь Wordpress. Нужно получить список постов, но чтобы примерно понимать, о чём пост, хотим также получить одну из категорий каждого поста. Костылями этот вопрос решается при помощи group by posts.name и отключения параметра only_full_group_by.
Оказалось, мне нужна была функция ANY_VALUE())
А можно список всех получить через GROUP_CONCAT
Обсуждают сегодня