Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Посоветуйте, как сделать запрос


Автор: cheezy 13.10.2007, 23:14
Привет всем. У меня вопрос. Есть три банальные таблицы: Users (id, login), Groups (id, name), Users_Groups (id, user_id, group_id). Нужно сделать вывод списка пользователей, в каждой строке списка - логин пользователя и группы, к которым он принадлежит.

Пример заполнения таблиц:
Users
id | login
1 | Вася
2 | Петя
3 | Коля
Groups
id | name
1 | Admins
2 | Moders
3 | Users
4 | Ban
Users_groups
id | user_id | group_id
1 | 1 | 1
2 | 2 | 3
3 | 1 | 2
4 | 3 | 3
5 | 3 | 4

Пример вывода данных:
Пользователь | Членство в группах
Вася | Admins; Moders;
Петя | Users;
Коля | Users; Ban;

Так вот, как сделать такое в один запрос? А то приходится загонять данные в массив, а потом уже из php крутить его так, как душе угодно.

Автор: cheezy 14.10.2007, 00:08
Не поверите! =) Я сидел над этой проблемой кучу времени, а нашел решение сразу после создания этой темы! =) Вот:
Код

SELECT
  u.`id` AS id,
  u.`login` AS login,
  GROUP_CONCAT(g.`name` SEPARATOR ', ') AS in_groups
FROM
  `users` AS u,
  `users_groups` AS ug,
  `groups` AS g
WHERE
  u.`id` = ug.`user_id`
  AND g.`id` = ug.`group_id`";
 GROUP BY u.`login` ORDER BY u.`login`;


Урра!  smile В результате получаем result в три колонки: id, login и in_groups - перечисленные через запятую имена групп, в которые входит пользователь! Можно прикрутить еще много чего, если будут вопросы  у кого - постараюсь ответить! =)

Добавлено через 3 минуты и 26 секунд
Не поверите! =) Я сидел над этой проблемой кучу времени, а нашел решение сразу после создания этой темы! =) Вот:
Код

SELECT
  u.`id` AS id,
  u.`login` AS login,
  GROUP_CONCAT(g.`name` SEPARATOR ', ') AS in_groups
FROM
  `users` AS u,
  `users_groups` AS ug,
  `groups` AS g
WHERE
  u.`id` = ug.`user_id`
  AND g.`id` = ug.`group_id`";
 GROUP BY u.`login` ORDER BY u.`login`;


Урра!  smile В результате получаем result в три колонки: id, login и in_groups - перечисленные через запятую имена групп, в которые входит пользователь! Можно прикрутить еще много чего, если будут вопросы  у кого - постараюсь ответить! =)

Автор: Папараццы 15.10.2007, 15:04
Your SQL query was useful for me.. Thanks 

Автор: cheezy 15.10.2007, 16:17
You are welcome.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)