Я собираюсь сделать все возможное, чтобы попытаться объяснить это. У меня есть приложение, которое содержит несколько типов ролей. В этом случае важны только два «менеджера» и «представитель». Когда создается представитель, они назначаются одному или нескольким менеджерам внутри этой компании (компания назначается при создании менеджера). Обратите внимание, что все пользователи хранятся в той же таблице, что и «Пользователи».SQL DELETE, UPDATE или INSERT на основе сравнения массивов
Когда этот представитель связывается с менеджером (ами), PRIMARY KEY (в моем случае столбец «userId» в таблице пользователя) для представителя и первичный ключ для менеджера вставляются в таблицу с именем ManagerRepRelationship , Так, например, если у меня есть следующая таблица Users (только собираюсь работать с перевалами, которые имеют значения в данном случае):
userId | username | role | accountId |
______ ________ ______________ _________
1 jsmith manager 14
2 mfoster manager 14
3 lcarter manager 18
4 jdoe representative 14
5 tlarson representative 18
6 rhoward representative 18
представителей может быть назначен только менеджер в своей учетной записи, так что если эта таблица выше выглядит, что путь, ManagerRepRelationship может выглядеть следующим образом:
repId | managerId
_____ _________
4 1
5 3
6 3
Проблема Я бегу в когда дело доходит до редактирования этих отношений. В настоящее время у меня есть отдельная форма и страница JUST для обработки этих изменений отношений, так как это будет очень ограниченная страница. Скажем, в этом случае мы собираемся отредактировать представителя jdoe
и назначить ему другого менеджера. В настоящее время он только назначен jsmith
, но мы хотим дать ему двух менеджеров, поэтому мы назначим его mfoster
. URL для страницы в этом случае будет что-то вроде:
http:localhost:8888/mod-super-admin/edit-relatoinship.php?repId=4&accountId=14
На верхней части страницы, я хватаю все менеджер для этой учетной записи (обратите внимание на таблицу адресов в поле ниже запросе только там, где я вы не заметите, что я даже не включил addressId в таблицу «Мои пользователи» выше. Я ничего не обновляю для таблицы «Адрес» на этой странице, я просто хочу, чтобы первая и фамилия менеджеров для моих <select>
вариантов)
// Get the url variables
$rep_id = $_GET["repId"];
$account_id = $_GET["accountId"];
// grab all managers tied to the account (not the rep)
$manager_sql = "SELECT Users.userId, Address.firstName, Address.lastName FROM Users JOIN Address ON Users.addressId=Address.addressId WHERE Users.role='manager' AND Users.accountId=" . $account_id;
$account_managers = mysqli_query($connection,$manager_sql);
// grab all managers assigned to the rep
$relationship_sql = "SELECT managerId FROM ManagerRepRelationship WHERE repId=" . $rep_id;
$rep_rels = mysqli_query($connection, $relationship_sql);
// create and array that houses current assigned managers
$current_managers = array();
while($row = mysqli_fetch_array($rep_rels)){
array_push($current_managers, $row["managerId"]);
}
форма выглядит следующим образом. Он выделит менеджера, если он уже назначен.
<form method="POST" action="./mod-super-admin/edit-relationship.php?repId=<?php echo $rep_id; ?>&accountId=<?php echo $account_id; ?>">
<div class="col-sm-12">
<div class="form-group">
<div class="form-group mbs">
<label for="manager" class="label-medium">Assigned Managers</label><br>
<small>To Select Multiple Managers Hold Down CTRL (CMD for Mac) and click</small>
<select name="manager[]" class="form-control input-medium" multiple="multiple">
<?php
$output;
while($manager = mysqli_fetch_assoc($account_managers)) :
$output .= '<option value="' . $manager["userId"] . '"';
foreach($current_managers as $key=>$value) :
if($value === $manager["userId"]){
$output .= ' selected';
}
endforeach;
$output .= '>' . $manager["lastName"] . ', ' . $manager["firstName"] . '</option>';
endwhile;
echo $output;
?>
</select>
</div>
<input type="submit" name="editRelationshipSubmit" class="btn btn-large btn-green mtm" value="Update Relationship">
</div>
</div>
</form>
В нашем случае выше PhP будет выводить mutliselect с именем менеджеров и если менеджер назначается повторении он будет выделен уже. Здесь приходит часть, с которой я столкнулся. Когда дело доходит до редактирования этих реалий. Например, я понимаю, если бы я просто добавил mfoster
в качестве менеджера на jdoe
Я бы просто запустил и INSERT INTO
на ManagerRepRelationship
, или если бы я должен был удалить jsmith
в качестве менеджера, я бы запустил DELETE FROM ManagerRepRelationship WHERE repId=4 AND managerId=1
.
Как компенсировать то, что происходит? У меня нет подсказки, если текущий пользователь, внесший эти изменения, собирается добавлять отношения менеджера, удаляет отношения с менеджером, может быть, они мало что делают.
Я сделал этот массив $current_managers
, чтобы я мог проверить его на массив $_POST["manager"];
при отправке формы. Следует отметить, что единственными данными в массиве являются userId
. Я просто зациклен на выполнении различных SQL-команд для обновления моей базы данных на основе сравнения этих массивов. Надеюсь, я хорошо описал ситуацию, в которой я нахожусь.
Слишком длинный вопрос: o –
@ HamzaZafeer хорошо, если бы я не представил подробностей, мне сказали бы «недостаточно информации» –