Здравствуйте, как лучше организовать постановку задания нескольким пользователям.
Задания находятся в таблице tasks, в ней есть столбцы creatorid, receptorid.
Когда рецептор один? проблем не возникает. А вот как сделать чтобы назначить несколько? Хранить в одном столбце получателей через запятую думаю неправильно.
Нужно создать дополнительную таблицу. Как это правильно организовать?
1. landcaster - 20 Января, 2014 - 08:07:51 - перейти к сообщению
2. Ch_chov - 20 Января, 2014 - 08:40:52 - перейти к сообщению
landcaster пишет:
Хранить в одном столбце получателей через запятую думаю неправильно
Вполне нормальный вариант, если не нужно делать выборки или сортировки по этому столбцу. Можно еще serialize использовать. Если всё таки нужно использовать receptorid в SQL запросах, то делайте для каждой пары creatorid + receptorid отдельную запись. Разумеется creatorid не должен быть уникальным ключом в такой таблице.
3. landcaster - 20 Января, 2014 - 10:56:15 - перейти к сообщению
То есть, либо так , либо так? Не существует других более оптимальных вариантов?
Возможно будут выборки поэтому в одном столбце нежелательно.
(Добавление)
А можно пожалуйста поподробней про второй вариант. Какие таблицы должны быть и как делать выборку и вставлять задания нескольким пользователям..
Возможно будут выборки поэтому в одном столбце нежелательно.
(Добавление)
А можно пожалуйста поподробней про второй вариант. Какие таблицы должны быть и как делать выборку и вставлять задания нескольким пользователям..
4. teddy - 20 Января, 2014 - 12:08:09 - перейти к сообщению
landcaster пишет:
Хранить в одном столбце получателей через запятую думаю неправильно.
Правильно думаете... это нарушение нормальной формы БД
Однозначно делайте вторую таблицу, а там уже джоином присоединяйте и получайте многих исполнителей для одного заказчика
landcaster пишет:
creatorid, receptorid.
Так же добавьте уникальный id для каждой записи, это что называется обязаловка...
5. landcaster - 20 Января, 2014 - 12:31:56 - перейти к сообщению
teddy пишет:
Однозначно делайте вторую таблицу, а там уже джоином присоединяйте и получайте многих исполнителей для одного заказчика
что за таблица и как присоединять? Что-то у меня не получается.
из tasks убрал creatorid и receptorid. оставил уникальный taskid
создал таблицу tasktorecep, в ней
taskid, creatorid, receptorid
Получается чтобы вывести задания назначенные user1.
1. Нужно выбрать из tasktorecep все taskid где receptorid = user1
2. Нужно выбрать из tasks все задания где tasks.taskid= tasktorecep.taskid
поправьте если не прав пожалуйста
6. teddy - 20 Января, 2014 - 13:29:04 - перейти к сообщению
Вариант с джоином убрал т.к думаю можно даже проще сделать
Можно сделать 1 таблицу но заказы добавлять не через запятую для одного заказчика а как отдельную запись а поле исполнителя оставлять пустым когда создается заказ, т.е DEFAULT NULL
--tasks
id|customer_id|task|executor_id
У тех записей где executor_id это NULL, значит исполнителей ещё нет, а если исполнитель появился то мы апдейтим поле executor_id там где id равно текущему заданию и записываем в это поле айдишник исполнителя...
Можно сделать 1 таблицу но заказы добавлять не через запятую для одного заказчика а как отдельную запись а поле исполнителя оставлять пустым когда создается заказ, т.е DEFAULT NULL
--tasks
id|customer_id|task|executor_id
У тех записей где executor_id это NULL, значит исполнителей ещё нет, а если исполнитель появился то мы апдейтим поле executor_id там где id равно текущему заданию и записываем в это поле айдишник исполнителя...
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- SELECT `customer_id`, `task`, `executor_id` FROM `tasks` WHERE `customer_id` =10 AND `executor_id` =5
Можно так можно и с джоином в зависимости от того как вы будете обрабатывать данные