Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Организация выборки из таблицы с несколькими значениями в поле / 18 сообщений из 18, страница 1 из 1
09.04.2015, 18:16:04
    #38932295
SerhiiPLAY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
Здравствуйте!
Есть задача: Вывести список задач, в которых присутствует сотрудник "Сергей".
Имеем: 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 застрял на этом моменте.
...
Рейтинг: 0 / 0
09.04.2015, 18:21:01
    #38932310
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAY,

Выделяйте связи между задачами и сотрудниками в отдельную таблицу. А то сейчас MasterZiv придет ругаться на нарушение первой нормальной формы. И будет прав. :)
...
Рейтинг: 0 / 0
09.04.2015, 18:26:51
    #38932319
SerhiiPLAY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
miksoft,

Я уже сломал голому, о том, как реализовать правильно промежуточную таблицу.
Как я себе представлял, это поле 'id' и поля 'sotrudnik1', 'sotrudnik2'...
Ведь возможны задачи с большим количеством участников. Как мне угадать, сколько полей создать?
...
Рейтинг: 0 / 0
09.04.2015, 18:28:47
    #38932324
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYЕсли правильнее будет изменить структуру, то как?
Правильно - сначала почитать про нормальные формы и про анализ предметной области.

По структуре - убрать поле uchastniki и создать таблицу (ID задачи - ID сотрудника).
...
Рейтинг: 0 / 0
09.04.2015, 18:29:33
    #38932325
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYКак мне угадать, сколько полей создать?Два поля - id задачи и id сотрудника.
По вкусу и задаче возможны добавки, например, дата начала и дата окончания работы конкретного сотрудника по конкретной задаче.
...
Рейтинг: 0 / 0
09.04.2015, 18:29:44
    #38932328
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYКак мне угадать, сколько полей создать?Чего гадать? ДВА! просто на одну задачу будет столько записей, сколько с ней работает сотрудников.
...
Рейтинг: 0 / 0
09.04.2015, 18:35:50
    #38932343
SerhiiPLAY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
Akina,

Точно! Я просто привязался к тому, что в таблице задач должно быть поле участников...
Akina на одну задачу будет столько записей, сколько с ней работает сотрудников.
Получается, промежуточная таблица будет расти с геометрической прогрессией при росте задач...

miksoftПо вкусу и задаче возможны добавки, например, дата начала и дата окончания работы конкретного сотрудника по конкретной задаче.

Да, спасибо за подсказку.
...
Рейтинг: 0 / 0
09.04.2015, 18:42:44
    #38932352
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYПолучается, промежуточная таблица будет расти с геометрической прогрессией при росте задач...Если только одновременно будет расти таблица пользователей и среднее количество пользователей на задачу.
А скорее всего рост таблицы связки будет линейным относительно роста числа задач.
...
Рейтинг: 0 / 0
09.04.2015, 18:52:10
    #38932367
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYПолучается, промежуточная таблица будет расти с геометрической прогрессией при росте задач...
Да начхать! Сколько там у тебя задач? допустим, тысяча... сколько народу? допустим, ещё тысяча... сколько народу работает с одной задачей? допустим, все... миллион записей в таблице с двумя полями типа integer? да ерунда, плюнуть и растереть...
...
Рейтинг: 0 / 0
09.04.2015, 19:08:14
    #38932392
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
miksoftSerhiiPLAY,

Выделяйте связи между задачами и сотрудниками в отдельную таблицу. А то сейчас MasterZiv придет ругаться на нарушение первой нормальной формы. И будет прав. :)
...
Рейтинг: 0 / 0
09.04.2015, 19:10:23
    #38932396
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYmiksoft,

Я уже сломал голому, о том, как реализовать правильно промежуточную таблицу.

Если ты дашь определения таблиц, как они есть у тебя сейчас, я тебе дам как они должны быть.
...
Рейтинг: 0 / 0
09.04.2015, 19:32:23
    #38932420
SerhiiPLAY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
MasterZivSerhiiPLAYmiksoft,

Я уже сломал голому, о том, как реализовать правильно промежуточную таблицу.

Если ты дашь определения таблиц, как они есть у тебя сейчас, я тебе дам как они должны быть.

Всех таблиц или касательно вопроса темы?
...
Рейтинг: 0 / 0
10.04.2015, 16:38:14
    #38933244
SerhiiPLAY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
Всё получилось! Спасибо за помощь!

Можно еще вопрос?

Оптимален ли запрос? Как его можно оптимизировать?
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` связка между сотрудниками (они в отдельной таблице) и задачами.
...
Рейтинг: 0 / 0
10.04.2015, 16:41:36
    #38933250
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYIN (SELECT DISTINCTВо-первых, DISTINCT тут смысла не имеет.
Во-вторых, если версия MySQL ниже 5.6, то IN (SELECT ...) желательно переписать через JOIN или EXISTS.
SerhiiPLAY'$_SESSION[user_id]'Зачем число в кавычки брать? Чтобы однажды налететь на преобразование `staff_id` к строке?
...
Рейтинг: 0 / 0
10.04.2015, 17:12:42
    #38933287
SerhiiPLAY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
miksoftSerhiiPLAYIN (SELECT DISTINCTВо-первых, DISTINCT тут смысла не имеет.
Во-вторых, если версия MySQL ниже 5.6, то IN (SELECT ...) желательно переписать через JOIN или EXISTS.
SerhiiPLAY'$_SESSION[user_id]'Зачем число в кавычки брать? Чтобы однажды налететь на преобразование `staff_id` к строке?
Да, я пробовал с JOIN и у меня дублировались строки, оттуда и остался DISTINCT. Возможно я не понял, как правильно выбрать строки из `demands` без объединения с `participants`.
...
Рейтинг: 0 / 0
10.04.2015, 17:37:41
    #38933309
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYВсех таблиц или касательно вопроса темы?

Естественно, касательно вопроса.
...
Рейтинг: 0 / 0
10.04.2015, 17:39:11
    #38933312
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYМожно еще вопрос?
Оптимален ли запрос?


Нет, не оптимален...
...
Рейтинг: 0 / 0
10.04.2015, 23:16:32
    #38933548
retvizan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация выборки из таблицы с несколькими значениями в поле
SerhiiPLAYДа, я пробовал с JOIN и у меня дублировались строки, оттуда и остался DISTINCT. Возможно я не понял, как правильно выбрать строки из `demands` без объединения с `participants`.
В общем случае
Код: sql
1.
SELECT * FROM t1 WHERE t1.col1 IN (SELECT col2 FROM t2 WHERE x);


эквивалентно
Код: sql
1.
SELECT * FROM t1 JOIN (SELECT DISTINCT col2 FROM t2 WHERE x) t ON t1.col1=t.col2; 


если t2.col2 unique key, то
Код: sql
1.
SELECT * FROM t1 JOIN t2 ON t1.col1=t.col2 WHERE t2.x; 
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Организация выборки из таблицы с несколькими значениями в поле / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]