|
|
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть задача: Вывести список задач, в которых присутствует сотрудник "Сергей". Имеем: 2 таблицы: zadachi id; data; postanovshik_zadachi; uchastniki; 1; 2015-03-20; 1; 2,1; 2; 2015-04-01; 2; 1; 3; 2015-04-10; 3; 1,2,4; ... sotrudniki id; imya; 1; Александр; 2; Сергей; 3; Роман; 4; Ирина; ... Т.е. в результате должна быть табличка с двумя задачами: ID; Дата; Постановщик; Участники; 1; 2015-03-20; Александр; Сергей, Александр; 3; 2015-04-10; Роман; Александр, Сергей, Ирина; Думал о разборе строки 'uchastniki' в массив в первом запросе, а затем вторым запросом проверять элементы массива на совпадение с записями в 'sotrudniki'. Но не могу понять, как мне правильно составить запрос. Это можно реализовать без изменения структуры таблиц? Если правильнее будет изменить структуру, то как? Спасибо за помощь, делаю CRM застрял на этом моменте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 18:16:04 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAY, Выделяйте связи между задачами и сотрудниками в отдельную таблицу. А то сейчас MasterZiv придет ругаться на нарушение первой нормальной формы. И будет прав. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 18:21:01 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
miksoft, Я уже сломал голому, о том, как реализовать правильно промежуточную таблицу. Как я себе представлял, это поле 'id' и поля 'sotrudnik1', 'sotrudnik2'... Ведь возможны задачи с большим количеством участников. Как мне угадать, сколько полей создать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 18:26:51 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYЕсли правильнее будет изменить структуру, то как? Правильно - сначала почитать про нормальные формы и про анализ предметной области. По структуре - убрать поле uchastniki и создать таблицу (ID задачи - ID сотрудника). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 18:28:47 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYКак мне угадать, сколько полей создать?Два поля - id задачи и id сотрудника. По вкусу и задаче возможны добавки, например, дата начала и дата окончания работы конкретного сотрудника по конкретной задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 18:29:33 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYКак мне угадать, сколько полей создать?Чего гадать? ДВА! просто на одну задачу будет столько записей, сколько с ней работает сотрудников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 18:29:44 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
Akina, Точно! Я просто привязался к тому, что в таблице задач должно быть поле участников... Akina на одну задачу будет столько записей, сколько с ней работает сотрудников. Получается, промежуточная таблица будет расти с геометрической прогрессией при росте задач... miksoftПо вкусу и задаче возможны добавки, например, дата начала и дата окончания работы конкретного сотрудника по конкретной задаче. Да, спасибо за подсказку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 18:35:50 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYПолучается, промежуточная таблица будет расти с геометрической прогрессией при росте задач...Если только одновременно будет расти таблица пользователей и среднее количество пользователей на задачу. А скорее всего рост таблицы связки будет линейным относительно роста числа задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 18:42:44 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYПолучается, промежуточная таблица будет расти с геометрической прогрессией при росте задач... Да начхать! Сколько там у тебя задач? допустим, тысяча... сколько народу? допустим, ещё тысяча... сколько народу работает с одной задачей? допустим, все... миллион записей в таблице с двумя полями типа integer? да ерунда, плюнуть и растереть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 18:52:10 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
miksoftSerhiiPLAY, Выделяйте связи между задачами и сотрудниками в отдельную таблицу. А то сейчас MasterZiv придет ругаться на нарушение первой нормальной формы. И будет прав. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 19:08:14 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYmiksoft, Я уже сломал голому, о том, как реализовать правильно промежуточную таблицу. Если ты дашь определения таблиц, как они есть у тебя сейчас, я тебе дам как они должны быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 19:10:23 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
MasterZivSerhiiPLAYmiksoft, Я уже сломал голому, о том, как реализовать правильно промежуточную таблицу. Если ты дашь определения таблиц, как они есть у тебя сейчас, я тебе дам как они должны быть. Всех таблиц или касательно вопроса темы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 19:32:23 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
Всё получилось! Спасибо за помощь! Можно еще вопрос? Оптимален ли запрос? Как его можно оптимизировать? SELECT `id`, `date_start`, `title`, `company`, `adres`, `demand_type`, `staff_open`, `staff_main`, `status`, `important` FROM `demands` AS `t1` WHERE `t1`.`id` IN (SELECT DISTINCT `demand_id` FROM `participants` WHERE `staff_id` = '$_SESSION[user_id]') ORDER BY `date_start` DESC; В таблице `demands` задачи сотрудников, в таблице `participants` связка между сотрудниками (они в отдельной таблице) и задачами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 16:38:14 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYIN (SELECT DISTINCTВо-первых, DISTINCT тут смысла не имеет. Во-вторых, если версия MySQL ниже 5.6, то IN (SELECT ...) желательно переписать через JOIN или EXISTS. SerhiiPLAY'$_SESSION[user_id]'Зачем число в кавычки брать? Чтобы однажды налететь на преобразование `staff_id` к строке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 16:41:36 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
miksoftSerhiiPLAYIN (SELECT DISTINCTВо-первых, DISTINCT тут смысла не имеет. Во-вторых, если версия MySQL ниже 5.6, то IN (SELECT ...) желательно переписать через JOIN или EXISTS. SerhiiPLAY'$_SESSION[user_id]'Зачем число в кавычки брать? Чтобы однажды налететь на преобразование `staff_id` к строке? Да, я пробовал с JOIN и у меня дублировались строки, оттуда и остался DISTINCT. Возможно я не понял, как правильно выбрать строки из `demands` без объединения с `participants`. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 17:12:42 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYВсех таблиц или касательно вопроса темы? Естественно, касательно вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 17:37:41 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYМожно еще вопрос? Оптимален ли запрос? Нет, не оптимален... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 17:39:11 |
|
||
|
Организация выборки из таблицы с несколькими значениями в поле
|
|||
|---|---|---|---|
|
#18+
SerhiiPLAYДа, я пробовал с JOIN и у меня дублировались строки, оттуда и остался DISTINCT. Возможно я не понял, как правильно выбрать строки из `demands` без объединения с `participants`. В общем случае Код: sql 1. эквивалентно Код: sql 1. если t2.col2 unique key, то Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 23:16:32 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38932319&tid=1833327]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 289ms |

| 0 / 0 |
