#php #mysql #mysqli #sql-delete
#php #mysql #mysqli #sql-удалить
Вопрос:
У меня есть следующий запрос, чтобы получить всех участников и некоторую информацию.
$stmt = $conn->prepare("select m.`name`, m.`id`, m.`group_id`, p.`field_1`, g.`data1`, g.`data2`
from members m
inner join pfields p on m.`id` = p.`id`
inner join groups g on g.`g_id` = m.`group_id`
where m.`group_id` = 1");
$stmt->execute();
$result = $stmt->get_result();
У меня есть следующий код для вставки новых участников в мой список участников.
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
//code update members
$stmt = $conn->prepare("INSERT INTO memberlist (id, name) VALUES (?, ?)");
$stmt->bind_param("ss", $row['id'], $row['name']);
$stmt->execute();
}
Однако я заметил, что если участник больше не является частью сообщества, его имя никогда не удаляется, поскольку я только добавляю новые имена.
Удаление происходит с помощью DELETE
но какой самый простой способ проверить, является ли этот участник по-прежнему частью группы в исходном запросе из members
, и если больше нет, удалить участника с этим id
из memberlist
? В приведенном ниже примере я хочу удалить Арнольда из списка участников, потому что его больше нет в group_id 1 в members.
members memberlist
id | name | group_id id | name | group_id
----------------------- ----------------------
1 | Donald | 1 1 | Donald | 1
13 | Jeff | 1 13 | Jeff | 1
25 | Arnold | 3 25 | Arnold | 1
Ответ №1:
Вы могли бы просто выполнять запрос примерно так каждый раз, когда один из них удаляется:
DELETE ml FROM memeberlist ml
LEFT JOIN members m ON m.id = ml.id
WHERE m.id IS NULL
Комментарии:
1. У меня это не сработало, но заставило меня задуматься, пока я не разобрался. Я добавил group_id в свою таблицу memberlist, и каждый участник с неправильным group_id я удаляю.