Удалить строку из БД, если участник больше не является частью группы - PullRequest
0 голосов
/ 08 апреля 2019

У меня следующий запрос, чтобы получить всех участников и некоторую информацию.

$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                    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 Ответ

2 голосов
/ 08 апреля 2019

Вы можете просто сделать запрос примерно так каждый раз, когда он удаляется:

DELETE ml FROM memeberlist ml
LEFT JOIN members m ON m.id = ml.id
WHERE m.id IS NULL
...