Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Двухтабличный запрос - группы и пользователи
 
 автор: likethat   (01.07.2007 в 15:38)   письмо автору
 
 

Здравствуйте!
Возможно вопрос банален (я начинающий), но мне нужно знать ответ на него.
Есть две таблицы:
users:
user_id
name
group_id

и groups:
group_id
name

Нужно вывести список принадлежности пользователей группам. Написал такой запрос:
SELECT users.name AS name, groups.name AS grName FROM users, groups WHERE
users.group_id=groups.group_id;
Тут все нормально (кажется).
ВОПРОС: как изменится эта выборка если пользователь может находиться в нескольких группах??? И как она изменится если пользователь не принадлежит ни одной из групп?
Спасибо!..

   
 
 автор: LikeThat   (01.07.2007 в 23:08)   письмо автору
 
   для: likethat   (01.07.2007 в 15:38)
 

Пожалуйста................ очень нужна ваша помощь...

   
 
 автор: Trianon   (02.07.2007 в 00:59)   письмо автору
 
   для: likethat   (01.07.2007 в 15:38)
 

Лучше написать так:

SELECT users.name AS userName, 
       groups.name AS grName 
  FROM users 
  LEFT JOIN groups ON users.group_id=groups.group_id;

Такой запрос (помимо того, что он значительно нагляднее показывает суть выполняемых действий) будет выводить даже тех пользователей, у которых не указана (или неправильно указана группа.
Первое - из-за синтаксиса конструкции соединения таблиц JOIN ... ON
Второе - благодаря применению внешнего левостороннего соединения LEFT JOIN


Если требуется, чтобы пользователь мог быть размещен в нескольких группах - этих таблиц не хватит.
В строку пользователя невозможно записать несколько групп.
Придется создать связующую таблицу для реализации отношения M:N - разные пользователи в разных группах: usr_grp_rel(id_rel, id_user, id_group)

Соответственно, и сам запрос потребуется переделать.

SELECT users.name AS userName, 
       groups.name AS grName 
  FROM users 
  LEFT JOIN usr_grp_rel ON users.user_id=usr_grp_rel.user_id
  LEFT JOIN groups ON usr_grp_rel.group_id=groups.group_id
ORDER BY userName, grName

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования