Возникла проблема с множественным выбором типа.
В моем сценарии CRM я храню данные о посещениях клиентов с указанием количества продавцов, которые их посетили. Вот моя таблица посещений
visit_id | customer | visit_date
1 | 4 | 2020-05-16
2 | 3 | 2020-05-20
и данные о продавцах, которые я храню в таблице visit_attendees, например
id | visit_id | attendees
1 | 1 | 1
2 | 1 | 3
3 | 1 | 4
4 | 2 | 3
5 | 2 | 2
здесь идентификаторы посетителей, которые я получаю из таблицы sales_persons
sid | fname | lname
1 | ABC | CDS
2 | XYZ | AAA
3 | ZZZ |
4 | CDE | H
хранение не проблема. Но при редактировании я хочу, чтобы эти значения были выбраны, и хочу сохранить только в том случае, если дополнительные добавлены или уже представленные удалены. Я не понимаю, как это сделать.
Теперь я правильно делаю метод поворота, подобный этому
<?php
$m1 = DB_query("SELECT sp.id, sp.fname, sp.lname, va.attendees FROM sales_persons sp INNER JOIN visit_attendees va ON sp.id=va.attendees WHERE va.visit_id=".$VisitID.""); ?>
<h4>Attendies</h4>
<select name="attendees[]" class="form-control select2 is-invalid" multiple="multiple" required>
<?php while($m2 = DB_fetch_array($m1)) { ?>
<option value="<?php echo $m2['id'];?>" selected="selected"><?php echo $m2['fname'].' '.$m2['lname'];?></option>
<?php }
$st = "SELECT id, fname, lname FROM sales_persons";
$st1 = DB_query($st);
while($st2 = DB_fetch_array($st1)) { ?>
<option value="<?php echo $st2['id']; ?>"> <?php echo $st2['fname'].' '.$st2['lname']; ?> </option>
<?php } ?>
</select>
, и обновляю таблицу visit_attendees следующим образом
if(isset($_POST['UpdateVisits']))
{
$vid = DB_escape_string($_POST['visit_id']);
$attendees = $_POST['attendees'];
//$l1 = "UPDATE visits SET ....";
$d1 = DB_query("DELETE FROM visit_attendeees WHERE visit_id=".$vid."");
foreach($attendees as $attend)
{
$att = "INSERT INTO visit_attendies(visit_id, attendees) VALUES(".$vid.", ".DB_escape_string($attend).")";
$att1 = DB_query($att);
}
}
есть ли какой-нибудь другой прямой способ добиться этого?