Вы хотите установить этот параметр по умолчанию при открытии менеджера пакетов? к сожалению, это невозможно
Поскольку количество ваших проектов достаточно мало для отображения в одной таблице, я полностью поддерживаю переписывание соответствующей части таблицы user_projects
после отправки:
BEGIN TRANSACTION;
DELETE FROM user_projects WHERE user_id = $uid;
INSERT INTO user_projects (project_id, user_id)
VALUES ($proj1, $uid), ($proj2, $uid), ...;
COMMIT TRANSACTION;
Обратите внимание на использование расширенного синтаксиса INSERT
для записи ассоциации в одном операторе.
Вы также можете удалить user_projects.id
, если вам это не нужно, сохранив треть места в таблице.
Вы можете сгруппировать действия и сократить сценарий до 3 запросов.
Восстановить текущую выбранную опцию, используя LEFT JOIN из Chad Birch anwser.
Перед циклом:
$delete_ids = array();
$add_ids = array();
Внутри цикла:
// delete from database
$delete_ids[] = $project_id;
и
// add to database
$add_values[] = '('.$user_id.', '.$project_id.')';
И после цикла for:
if (count($delete_ids) > 0) {
mysql_query('DELETE FROM user_projects WHERE user_id = '.$user_id.' AND project_id IN ('.implode(', ', $delete_ids).')');
}
if (count($add_ids) > 0) {
mysql_query('INSERT INTO user_projects (user_id, project_id) VALUES '.implode($add_values));
}
Что ж, если предположить, что каждый пользователь имеет право работать над каждым проектом, на странице обработки формы вы хотите сделать что-то вроде этого:
$query = 'SELECT p.id AS project_id, u_p.id AS user_project_id '.
'FROM projects AS p '.
'LEFT JOIN user_projects AS u_p ON (u_p.project_id = p.id AND u_p.user_id = ?)';
Оставив присоединение, вы получите список из всех проектов в системе, и второй столбец будет иметь значение, только если пользователь, который вы редактируете, уже находится в этом проекте. Для приведенных вами примеров данных это результат, который вы получите, запросив user_id
1:
+------------+-----------------+
| project_id | user_project_id |
+------------+-----------------+
| 1 | |
| 2 | 2 |
+------------+-----------------+
Затем выполните цикл по результатам этого запроса, и для каждого результата проверьте, есть ли значение в $ _ POST
было отправлено для соответствующего project_id
. Если значение было отправлено (флажок был установлен) и строка user_project_id
пуста, вставьте строку в user_projects
, чтобы добавить эту ссылку. Если значение не было отправлено (флажок снят) и в строке задан user_project_id
, удалите эту строку из user_projects
, используя user_project_id
в качестве ключа. В противном случае ничего не делать, они не изменились бы так, как это было раньше.
Надеюсь, это понятно, дайте мне знать, если вы хотите, чтобы я попал в более подробно.