Задавайте вопросы, мы ответим
Вы не зашли.
http://raduga.uuuq.com/images/db.jpg - вот структура БД.
Необходимо составить запрос который вернёт массив Имен из таблицы "users" и соответствующие этому юзеру имена групп из таблицы "groups", связи юзеров и групп находятся в таблице: "users_grous". т.е. в результате должен получиться массив содержащий в себе ещё массивы (групп для каждого пользователя): [Пользователь1 , [Группа1 , Группа2 , Группа3] ; Пользователь2 , [Группа2 , Группа4]]
Неактивен
У меня пока получился вот такой запрос:
SELECT users.id, users.name, groups.group_name
FROM users
LEFT JOIN users_groups ON users.id = users_groups.user_id
LEFT JOIN groups ON users_groups.group_id = groups.id
Но выводит он не то что я хотел бы, а в выводит записи отдельно для каждой группы одного и того же пользователя. Т.е. Если "Пользователь1" состоит в группах "Группа1" и "Группа2", то данный запрос вернёт 2 записи:
Пользователь1 - Группа1
Пользователь1 - Группа2
А нужно что бы возвращал 1 запись во второй ячейки содержащую массив:
Пользователь1 - [Группа1, Группа2]
Неактивен
SELECT u.id, GROUP_CONCAT(g.group_name)
FROM users u
LEFT JOIN users_groups ug ON u.id = ug.user_id
JOIN groups g ON ug.group_id = g.id
GROUP BY 1
Неактивен
paulus написал:
SELECT u.id, GROUP_CONCAT(g.group_name)
FROM users u
LEFT JOIN users_groups ug ON u.id = ug.user_id
JOIN groups g ON ug.group_id = g.id
GROUP BY 1
Спасибо! Только вернулся не массив а строка разделенная Сепаратором
Можно ли вернуть именно массив?
Неактивен
Попробовал выполнить данный запрос в коде
$sql=" SELECT users.name, GROUP_CONCAT(groups.group_name SEPARATOR '\n\r') FROM users, groups, users_groups WHERE users.id = users_groups.user_id and groups.id = users_groups.group_id GROUP BY users.name"; $result = mysql_query($sql) or die("Ошибка при закросе к БД."); $row = mysql_fetch_array($result); var_dump($row);
Но в данном запросе не выводятся пользователи которые не находятся ни в одной из групп, мне нужно что бы выводились. Как можно доработать данный запрос?
Отредактированно jeka5555 (08.09.2009 15:10:49)
Неактивен
«Другой запрос может привести к другим результатам». Больше добавить, пожалуй, нечего
А «массив» — это таблица. Можете читать отдельными запросами для каждого пользователя.
Неактивен
paulus написал:
А «массив» — это таблица. Можете читать отдельными запросами для каждого пользователя.
Не слишком ли это затратно!?
Неактивен
Ну, Вы определитесь для себя — нужен ли вам агрегатный запрос, или нет. И выполняйте
только один из них — или тот, или другой — тогда будет не затратно
Неактивен