Существует таблица задач и таблица пользователей, которые связаны с таблицей Task_users, содержащей три столбца: id, Task_id, user_id. Одновременно с задачей может быть связано несколько пользователей, поэтому могут быть такие записи, как:
Код: Выделить всё
id task_id user_id
0 1 20
1 1 48
2 2 20
Код: Выделить всё
(new \database\DataSource)->main()->query('DELETE FROM task_users WHERE', [
'task_id' => (int) $values["id"],
'user_id NOT IN' => $values["assigned_users"]
])
Это работает по назначению.
Во второй части я хочу вставить назначенных_пользователей, которые не являются еще в таблице, но пропустите назначенные_пользователи, которые уже являются частью таблицы.
Итак, когда пользователи 20 и 48 были назначены раньше, но теперь я хочу назначить 20 и 55 задаче, которую она должна обновить:
Код: Выделить всё
id task_id user_id
0 1 20
2 2 20
3 1 55
Я пробовал REPLACE INTO, INSERT INTO с предложением WHERE NOT IN и INSERT INTO SELECT * FROM Task_users WHERE NOT EXISTS, но мне не удалось заставить его работать должным образом.
p>
Я фронтенд-специалист, поэтому я не так уж хорошо разбираюсь в этом. Я надеюсь, что кто-нибудь еще знает, был ли я почти на месте, но сделал что-то не так, или мне нужно написать совершенно другой тип SQL-скрипта.
Код: Выделить всё
foreach ($values["assigned_users"] as $assigned_user) {
Код: Выделить всё
(new \database\DataSource)->main()->query('REPLACE INTO task_users', [
'task_id' => (int) $values["id"],
'user_id' => $assigned_user
])
Код: Выделить всё
(new \database\DataSource)->main()->query('INSERT INTO task_users', [
'task_id' => (int) $values["id"],
'user_id' => $assigned_user
] , 'WHERE', [
'task_id' => (int) $values["id"],
'user_id NOT IN' => $values["assigned_users"]
])
Код: Выделить всё
(new \database\DataSource)->main()->query('INSERT INTO task_users', [
'task_id' => (int) $values["id"],
'user_id' => $assigned_user
] , 'SELECT * FROM task_users WHERE NOT EXISTS', [
'task_id' => (int) $values["id"],
'user_id' => $assigned_user
])
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... sts-not-in