Это выглядит как прямое соединение:
SELECT p.*, j.*
FROM People AS p INNER JOIN Roles AS r ON p.id = r.person_id
ORDER BY p.name;
Остальная часть работы - форматирование;это лучше всего сделать с помощью пакета отчетов.
Спасибо за быстрый ответ, это кажется хорошим началом, но вы получаете несколько строк на человека, как (вы должны представить, что это таблица, как выкажется, что я не могу форматировать в комментариях):
id | Name | email_address | phone_number | job_role | department
1 | paul | paul@example.com | 123456 | secretary | HR
1 | paul | paul@example.com | 123456 | assistant | media
2 | bob | bob@example.com | 567891 | manager | IT
Я бы хотел, чтобы в идеале был один ряд на человека со всеми его рабочими ролями, если это возможно?
Это зависит от вашей СУБД, но большинство доступных не поддерживают RVA - атрибуты со значениями отношений.То, что вам нужно, это иметь роль задания и часть отдела в виде таблицы, связанной с пользователем:
+----+------+------------------+--------------+------------------------+
| id | Name | email_address | phone_number | dept_role |
+----+------+------------------+--------------+------------------------+
| | | | | +--------------------+ |
| | | | | | job_role | dept | |
| 1 | paul | paul@example.com | 123456 | | secretary | HR | |
| | | | | | assistant | media | |
| | | | | +--------------------+ |
+----+------+------------------+--------------+------------------------+
| | | | | +--------------------+ |
| | | | | | job_role | dept | |
| 2 | bob | bob@example.com | 567891 | | manager | IT | |
| | | | | +--------------------+ |
+----+------+------------------+--------------+------------------------+
Это точно представляет требуемую информацию, но обычно это не вариант.
Итак, что будет дальше, зависит от вашего инструмента генерации отчетов.Используя тот, с которым я наиболее знаком (Informix ACE, часть Informix SQL, доступная от IBM для использования с СУБД Informix), вы просто убедитесь, что данные отсортированы, а затем напечатаете имя, адрес электронной почты и номер телефона.в разделе отчета «ДО ГРУППЫ ИД» и в разделе «НА КАЖДОЙ СТРОКЕ» вы будете обрабатывать (распечатывать) только информацию о роли и отделе.
Часто хорошей идеей является разделениеформатирование отчета по операциям поиска данных;это пример того, где это необходимо, если ваша СУБД не имеет необычных функций, помогающих форматировать выбранные данные.
О, дорогой, это звучит очень сложно, и я не смог бы легко с этим работатьбазу данных mySQL на странице PHP?
Материал RVA - вы правы, это не для MySQL и PHP.
С другой стороны, существуют миллионы отчетов(имеется в виду результаты запросов, отформатированных для представления пользователю), которые примерно это делают.Технический термин для них: « Отчет об отключении управления », но основная идея не сложна.
Вы ведете запись числа «id», которое вы обработали в последний раз - вы можете инициализироватьчто до -1 или 0. Когда текущая запись имеет номер идентификатора, отличный от предыдущего, тогда у вас есть новый пользователь, и вам нужно запустить новый набор строк вывода для нового пользователя и напечатать имя, адрес электронной почты иномер телефона (и изменить последний обработанный номер идентификатора).Когда текущая запись имеет тот же идентификационный номер, все, что вам нужно сделать, это обработать информацию о роли и отделе работы (не имя, адрес электронной почты и номер телефона).«Перерыв» происходит при изменении номера идентификатора.С одним уровнем нарушения контроля это не сложно;если у вас 4 или 5 уровней, вам нужно проделать больше работы, и поэтому есть пакеты отчетов, которые справляются с этим.
Так что это не сложно - просто нужно немного позаботиться.