4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 54
|
|
1 | |
Вывод 2-ух отделов10.11.2012, 14:58. Показов 1130. Ответов 10
Метки нет (Все метки)
На данный момент есть таблицы:
Users c полями id(INT), name(VARCHAR), department_id(INT); Departments c полями id(INT), name(VARCHAR). Выводить пользователей с их отделом очевидно просто через JOIN этих таблиц. Но если у пользователя может быть несколько отделов (2 и более), как быть?
0
|
10.11.2012, 14:58 | |
Ответы с готовыми решениями:
10
БД+документооборот (проектирование), способ хранения сотрудников и наименование их отделов. Актуальность данных Запрос: выбрать список отделов, работники которых являются подчиненными выбранного начальника Два сервера для двух отделов Функция ВПР при выборе отделов |
9 / 9 / 0
Регистрация: 05.11.2012
Сообщений: 32
|
|
10.11.2012, 15:42 | 2 |
Сначала подумай а как ты вообще сможешь записать данные в таблицу Users при условии что id это первичный ключ. Ты же просто не сможешь вставить данные отражающие факт работы пользователя в нескольких отделах, так что думать о том как ты данные будешь выбирать пока преждевременно, нужно прорабатывать структуру таблиц. Гугли про реализацию отношения между сущностями многие-ко-многим(many-to-many). Если коротко то тебе нужна третья таблица, что-то типа user_department(user_id,department_id) а поле department_id из таблицы users нужно удалить, но лучше почитай основательно теорию про модель-сущность связи и её нормализацию.
0
|
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 54
|
||||||
10.11.2012, 16:03 [ТС] | 3 | |||||
Я добавил 3-тью связную таблицу users_departments с полями id(INT), user_id(INT), department_id(INT).
И при запросе:
http://dc581.2shared.com/downl... 3-d1306364 А мне нужно на странице вывести все отделы по каждому пользователю.
0
|
9 / 5 / 1
Регистрация: 09.11.2012
Сообщений: 31
|
||||||
10.11.2012, 16:30 | 4 | |||||
Нужно сделать запрос ко всем таблицам сразу. Попробуйте вот так:
0
|
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 54
|
|
10.11.2012, 16:41 [ТС] | 5 |
Это немного не то, но спс.
Я уточню задачу. На выходе должны быть все пользователи, и одно дополнительное поле где будут через запетую(или пробел) все их отделы.
0
|
9 / 9 / 0
Регистрация: 05.11.2012
Сообщений: 32
|
|||||||||||
10.11.2012, 17:08 | 6 | ||||||||||
Если придерживаться соглашений что для первичного ключа выбирается имя по следующему правилу: имя_таблицы+_id то будет очень удобно использовать более короткую нотацию для джойнов с помощью USING вместо ON:
0
|
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 54
|
||||||
10.11.2012, 17:58 [ТС] | 7 | |||||
То что сверху решил.
Теперь выводит только одного пользователя?
0
|
9 / 9 / 0
Регистрация: 05.11.2012
Сообщений: 32
|
|
10.11.2012, 18:15 | 8 |
Ну а ты сам не можешь посмотреть что этот запрос выводит? Выводит информацию по всем пользователям, если нужно выбирать информацию только по какому-нибудь конкретному пользователю то допиши предложение WHERE u.id=123456.
0
|
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 54
|
||||||
10.11.2012, 18:29 [ТС] | 9 | |||||
Последнее!
Выводит только тех у кого назначены отделы(хотя стоит INNER, как вы советовали). А нужно выаодить всех, даже тех у кого они не назначены.
0
|
9 / 9 / 0
Регистрация: 05.11.2012
Сообщений: 32
|
|
10.11.2012, 18:48 | 10 |
Не наверно или я неправильно выразился или ты не так понял, всё правильно INNER JOIN выведет только тех пользователей у которых есть отделы, LEFT JOIN выведет даже тех пользователей у которых нет отделов. Вот неплохая статья о том как работают джойны Understanding JOINs in MySQL
1
|
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 54
|
|
10.11.2012, 18:55 [ТС] | 11 |
0
|
10.11.2012, 18:55 | |
10.11.2012, 18:55 | |
Помогаю со студенческими работами здесь
11
Диаграмма соотношения отделов сотрудников 1С, собственная конфигурация Дополнительный заработок для сотрудников айти-отделов и сисадминов Определить, продавцам каких отделов будет выплачена премия Выведите список всех сотрудников и отделов, отсортированный по отделам Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |