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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
landcaster
Отправлено: 20 Января, 2014 - 08:07:51
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+]


Здравствуйте, как лучше организовать постановку задания нескольким пользователям.
Задания находятся в таблице tasks, в ней есть столбцы creatorid, receptorid.
Когда рецептор один? проблем не возникает. А вот как сделать чтобы назначить несколько? Хранить в одном столбце получателей через запятую думаю неправильно.
Нужно создать дополнительную таблицу. Как это правильно организовать?
 
 Top
Ch_chov
Отправлено: 20 Января, 2014 - 08:40:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




landcaster пишет:
Хранить в одном столбце получателей через запятую думаю неправильно

Вполне нормальный вариант, если не нужно делать выборки или сортировки по этому столбцу. Можно еще serialize использовать. Если всё таки нужно использовать receptorid в SQL запросах, то делайте для каждой пары creatorid + receptorid отдельную запись. Разумеется creatorid не должен быть уникальным ключом в такой таблице.
 
 Top
landcaster
Отправлено: 20 Января, 2014 - 10:56:15
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+]


То есть, либо так , либо так? Не существует других более оптимальных вариантов?
Возможно будут выборки поэтому в одном столбце нежелательно.
(Добавление)
А можно пожалуйста поподробней про второй вариант. Какие таблицы должны быть и как делать выборку и вставлять задания нескольким пользователям..
 
 Top
teddy
Отправлено: 20 Января, 2014 - 12:08:09
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




landcaster пишет:
Хранить в одном столбце получателей через запятую думаю неправильно.

Правильно думаете... это нарушение нормальной формы БД

Однозначно делайте вторую таблицу, а там уже джоином присоединяйте и получайте многих исполнителей для одного заказчика

landcaster пишет:
creatorid, receptorid.

Так же добавьте уникальный id для каждой записи, это что называется обязаловка...

(Отредактировано автором: 20 Января, 2014 - 12:11:01)

 
 Top
landcaster
Отправлено: 20 Января, 2014 - 12:31:56
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+]


teddy пишет:
Однозначно делайте вторую таблицу, а там уже джоином присоединяйте и получайте многих исполнителей для одного заказчика


что за таблица и как присоединять? Что-то у меня не получается.
из tasks убрал creatorid и receptorid. оставил уникальный taskid
создал таблицу tasktorecep, в ней
taskid, creatorid, receptorid

Получается чтобы вывести задания назначенные user1.

1. Нужно выбрать из tasktorecep все taskid где receptorid = user1
2. Нужно выбрать из tasks все задания где tasks.taskid= tasktorecep.taskid

поправьте если не прав пожалуйста
 
 Top
teddy
Отправлено: 20 Января, 2014 - 13:29:04
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Вариант с джоином убрал т.к думаю можно даже проще сделать

Можно сделать 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


Можно так можно и с джоином в зависимости от того как вы будете обрабатывать данные

(Отредактировано автором: 20 Января, 2014 - 13:59:41)

 
 Top
landcaster
Отправлено: 20 Января, 2014 - 13:36:51
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+]


Огромное спасибо, попробую ваш вариант
 
 Top
landcaster
Отправлено: 21 Января, 2014 - 06:56:52
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+]


Что-то у меня не получается понять ваш вариант.
У меня не продавец и покупатель.
Начальник назначает задание нескольким сотрудником, то есть исполнитель изначально пустым не будет. У меня есть таблица с заданиями и таблица с юзерами. Я не пойму какую надо еще создать таблицу чтобы на одно задание можно было задавать несколько юзеров
 
 Top
Мелкий Супермодератор
Отправлено: 21 Января, 2014 - 07:16:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Таблица из пары полей: task_id, user_id
Типичная реализация связи многие-ко-многим


-----
PostgreSQL DBA
 
 Top
peters
Отправлено: 21 Января, 2014 - 09:23:14
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Янв. 2014  


Помог: 7 раз(а)




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)

(Отредактировано автором: 21 Января, 2014 - 10:57:24)

 
 Top
landcaster
Отправлено: 21 Января, 2014 - 10:16:51
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+]


Спасибо, а как вытащить все задания одного юзера?
 
 Top
peters
Отправлено: 21 Января, 2014 - 10:56:19
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Янв. 2014  


Помог: 7 раз(а)




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)
 
 Top
landcaster
Отправлено: 22 Января, 2014 - 08:31:32
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+]


Спасибо всем неравнодушным) все получилось!
 
 Top
landcaster
Отправлено: 30 Января, 2014 - 11:03:10
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+]


Не могу понять как вставить исполнителей...
в контроллере action_insertTask() запускает две функции
в модели функция insertTask() - записывает задание в таблицу tasks.
и insertUsers - должна записать id задания и исполнителей в таблицу tasks_to_users.


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

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

а вот id задания как внести в таблицу?
 
 Top
landcaster
Отправлено: 31 Января, 2014 - 11:55:03
Post Id


Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+]


помогитеееее
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB