Php 维护/更新关联集

Php 维护/更新关联集,php,mysql,mysqli,Php,Mysql,Mysqli,假设我们有这些表: CREATE TABLE meetings ( id INT AUTO_INCREMENT, # other fields PRIMARY KEY(id) ); CREATE TABLE participants ( id INT AUTO_INCREMENT, # other fields PRIMARY KEY(id) ); CREATE TABLE meetings_participations ( meeting

假设我们有这些表:

CREATE TABLE meetings (
    id INT AUTO_INCREMENT,
    # other fields
    PRIMARY KEY(id)
);
CREATE TABLE participants (
    id INT AUTO_INCREMENT,
    # other fields
    PRIMARY KEY(id)
);
CREATE TABLE meetings_participations (
    meeting INT,      # for joining on meetings.id
    participant INT,  # for joining on participants.id
    PRIMARY KEY(meeting,participant)
);
给定特定的
$meeting\u id
和该会议参与者的数组
$participant\u id
,更新表
会议参与者的好方法是什么

我考虑过

DELETE FROM meetings_participations
    WHERE meeting = $meeting_id;
INSERT INTO meetings_participations
        (meeting, participant)
    VALUES
        $participations;
其中,在PHP中

$participations = join(',', array_map(function($p){
    return "($meeting_id,$p)";
}, $participant_ids));

但我想知道是否最好是保存现有记录(而不是无条件删除并重新插入)。有更好的方法解决一般问题吗?

您可以使用exists子句来避免“删除然后插入”逻辑。创建两个函数,而不是一个。第一个函数将检查会议和参与者是否存在,如果不匹配,则函数返回1,调用另一个函数插入记录。若数据匹配,返回0表示无需调用第二个函数。我是mysql专家,不是php。如果您需要有关查询的帮助,请告诉我。@karanarora谢谢。你认为这会比“删除并插入”好吗?(我通常认为90%的记录是预先存在的。)我更喜欢检查记录是否存在,如果不存在则插入。唯一的原因是delete是一个昂贵的查询。它会为每一行删除创建日志,如果记录以百万计,那么它也会耗费大量时间。@karanarora删除是否比检查是否存在然后更新/插入更昂贵?