
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
29.11.2015, 19:27:03
|
|||
|---|---|---|---|
|
|||
Иерархия в запросе из трех таблиц в MySQL |
|||
|
#18+
Есть три таблицы: 1. table1 (id, t1_name) 2. table2 (id, t2_name, t1_id) 3. table3 (id, t3_name, ..., t1_id, t2_id) здесь поле t2_id - может быть равным NULL. Как построить запрос для отображения иерархии, вида: table1.t1_name ..... table2.t2_name (может и не быть в зависимости от t2_id в table3) ........... table3.t3_name, table3.field_1, ...., table3.field_n Пробовал изначально так: Код: sql 1. 2. 3. 4. p.s.: Саму иерархию отображаю в DBGridEh Delphi, СУБД MySQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.11.2015, 20:54:42
|
|||
|---|---|---|---|
Иерархия в запросе из трех таблиц в MySQL |
|||
|
#18+
le7otable3 (id, t3_name, ..., t1_id, t2_id)Ммм... это скорее бардак, а не иерархия. Как понимать случай, когда значения полей t1_id и t2_id указуют на две независимые ветви? Только не надо говорить, что такого, мол, быть не может - структура это допускает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.11.2015, 13:17:57
|
|||
|---|---|---|---|
|
|||
Иерархия в запросе из трех таблиц в MySQL |
|||
|
#18+
Так я собственно и прошу совета каким образом их связать? Про бардак - структура такая: филиал -> отдел -> сотрудник (сотрудники могут не пренадлежать ни одному отделу, но обязательно должен пренадлежать к филиалу). филиал, отдел, сотрудник - соответственно таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.11.2015, 15:27:21
|
|||
|---|---|---|---|
Иерархия в запросе из трех таблиц в MySQL |
|||
|
#18+
le7oструктура такая: филиал -> отдел -> сотрудник (сотрудники могут не пренадлежать ни одному отделу, но обязательно должен пренадлежать к филиалу). В этом случае в филиале должен существовать некий виртуальный отдел, к коему относятся все, не относящиеся к определённому отделу. Это в простейшем случае. В более сложном... чем отдел отличается от филиала? и то, и другое, есть одна и та же сущность. Просто один экземпляр этой сущности может являться атрибутом другого экземпляра той же сущности. Т.е. наличие двух таблиц (отдельно для филиалов, отдельно для отделов) избыточно и денормализующе. А если таблица будет одна - то сотрудник будет относиться к той минимальной единице, идентификатор которой указан в соотв. его атрибуте, и по подчинённости также ко всем вышестоящим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.11.2015, 17:13:19
|
|||
|---|---|---|---|
|
|||
Иерархия в запросе из трех таблиц в MySQL |
|||
|
#18+
Akina, не в моем случае, т.к. таблица филиалы содержит так же поля: ИНН, КПП и т.п. - реквизиты филиала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.11.2015, 17:18:28
|
|||
|---|---|---|---|
|
|||
Иерархия в запросе из трех таблиц в MySQL |
|||
|
#18+
Да и таблица отделы содержит так же сотрудника - начальника отдела+ так же поля которые необходимы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.11.2015, 18:44:23
|
|||
|---|---|---|---|
Иерархия в запросе из трех таблиц в MySQL |
|||
|
#18+
le7oтаблица отделы содержит так же сотрудника - начальника отдела Т.е. сотрудник ссылается на отдел, а отдел ссылается на сотрудника. Циклическая ссылка. Значит, FK невозможно. Отсюда потенция несогласованных данных. le7oне в моем случае, т.к. таблица филиалы содержит так же поля: ИНН, КПП и т.п. - реквизиты филиала.Нет. Просто некоторые атрибуты сущности имеют эти атрибуты, некоторые не имеют (NULL). Вариант решения - это три таблицы для хранения всех структурных подразделений. Первая - подразделения (филиал, отдел), причём отдел ссылается на другую запись той же таблицы (филиал), а для филиала в этом поле NULL. Вторая таблица - специфичные для филиала поля. Третья - специфичные для отдела поля. Впрочем, можете оставаться и в рамках своей структуры, но выборки будут весёлые... типа Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.11.2015, 18:52:30
|
|||
|---|---|---|---|
|
|||
Иерархия в запросе из трех таблиц в MySQL |
|||
|
#18+
Может будет проще - если представлю структуру таблиц (сделал просто для теста): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. И собственно сам запрос, который на данный момент используется: Код: sql 1. 2. 3. 4. 5. Получается таблица вида: 1 Сотруд.1 1 1 1 1 запись - первый уровень 1 1 запись - Второй уровень 1 2 Сотруд.2 1 1 1 1 запись - первый уровень 1 1 запись - Второй уровень 1 3 Сотруд.3 2 NULL 2 2 запись - первый уровень NULL NULL NULL 4 Сотруд.4 1 2 1 1 запись - первый уровень 2 2 запись - Второй уровень 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.11.2015, 20:33:43
|
|||
|---|---|---|---|
|
|||
Иерархия в запросе из трех таблиц в MySQL |
|||
|
#18+
Akina, по поводу циклической ссылки - ее я буду делать программно в Delphi без связей в БД. Akinaпричём отдел ссылается на другую запись той же таблицы (филиал), а для филиала в этом поле NULL. Вы подразумеваете структуру типа: id, parent_id? AkinaВпрочем, можете оставаться и в рамках своей структуры, но выборки будут весёлые... типа Наверное здесь я возможно не правильно понял Ваш запрос, разве он не означает, что филиал тоже может быть пустым? Повторюсь: Сотрудник в любом случае относится к филиалу, отделы так же в любом случае относятся к филиалу, и сотрудники в свою очередь могут как относится к отделу так и нет, допустим сотрудник - Директор (относится только к филиалу) Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&tablet=1&tid=1832441]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
33ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 284ms |

| 0 / 0 |
