Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Задание для нескольких исполнителей
Форумы портала PHP.SU » » Вопросы новичков » Задание для нескольких исполнителей

Страниц (2): [1] 2 »
 

1. landcaster - 20 Января, 2014 - 08:07:51 - перейти к сообщению
Здравствуйте, как лучше организовать постановку задания нескольким пользователям.
Задания находятся в таблице tasks, в ней есть столбцы creatorid, receptorid.
Когда рецептор один? проблем не возникает. А вот как сделать чтобы назначить несколько? Хранить в одном столбце получателей через запятую думаю неправильно.
Нужно создать дополнительную таблицу. Как это правильно организовать?
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 равно текущему заданию и записываем в это поле айдишник исполнителя...

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `customer_id`, `task`, `executor_id` FROM  `tasks` WHERE  `customer_id` =10 AND  `executor_id` =5


Можно так можно и с джоином в зависимости от того как вы будете обрабатывать данные
7. landcaster - 20 Января, 2014 - 13:36:51 - перейти к сообщению
Огромное спасибо, попробую ваш вариант
8. landcaster - 21 Января, 2014 - 06:56:52 - перейти к сообщению
Что-то у меня не получается понять ваш вариант.
У меня не продавец и покупатель.
Начальник назначает задание нескольким сотрудником, то есть исполнитель изначально пустым не будет. У меня есть таблица с заданиями и таблица с юзерами. Я не пойму какую надо еще создать таблицу чтобы на одно задание можно было задавать несколько юзеров
9. Мелкий - 21 Января, 2014 - 07:16:00 - перейти к сообщению
Таблица из пары полей: task_id, user_id
Типичная реализация связи многие-ко-многим
10. peters - 21 Января, 2014 - 09:23:14 - перейти к сообщению
3 таблицы:
tasks (id, name)
users (id, name)
tasks_to_users (id, task_id, user_id)

Добавить двух исполнителей (с айдишниками 3 и 4) к заданию 2:
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO tasks_to_users (task_id, user_id) VALUES (2, 3),  (2, 4)


Соответственно выбрать имена всех исполнителей задания с айдишником 2:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t.name FROM users u, tasks_to_user tu WHERE (tu.user_id=u.id) AND (tu.task_id=2)
11. landcaster - 21 Января, 2014 - 10:16:51 - перейти к сообщению
Спасибо, а как вытащить все задания одного юзера?
12. peters - 21 Января, 2014 - 10:56:19 - перейти к сообщению
landcaster пишет:
Спасибо, а как вытащить все задания одного юзера?

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t.name FROM tasks t, tasks_to_users tu WHERE (t.id=tu.task_id) AND (tu.user_id=2)
13. landcaster - 22 Января, 2014 - 08:31:32 - перейти к сообщению
Спасибо всем неравнодушным) все получилось!
14. landcaster - 30 Января, 2014 - 11:03:10 - перейти к сообщению
Не могу понять как вставить исполнителей...
в контроллере action_insertTask() запускает две функции
в модели функция insertTask() - записывает задание в таблицу tasks.
и insertUsers - должна записать id задания и исполнителей в таблицу tasks_to_users.


исполнители ajaxom передаются в ввиде users[]=1, users[]=2

var users= $('select[name="users"]').val()

а вот id задания как внести в таблицу?
15. landcaster - 31 Января, 2014 - 11:55:03 - перейти к сообщению
помогитеееее

 

Powered by ExBB FM 1.0 RC1