powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Организация выборки из таблицы с несколькими значениями в поле
18 сообщений из 18, страница 1 из 1
Организация выборки из таблицы с несколькими значениями в поле
    #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
Организация выборки из таблицы с несколькими значениями в поле
    #38932310
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerhiiPLAY,

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

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

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

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

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

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

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

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

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

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

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

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

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


Нет, не оптимален...
...
Рейтинг: 0 / 0
Организация выборки из таблицы с несколькими значениями в поле
    #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
18 сообщений из 18, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Организация выборки из таблицы с несколькими значениями в поле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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