如果已完成插入,则更新一行

时间:2017-08-14 12:33:41

标签: php mysql sql

我有这个SQL:

$s_sql = sprintf("INSERT INTO %s (id, id_jack, start_time, end_time)
                      VALUES (%d, %d, '%s', '%s') ON DUPLICATE KEY UPDATE start_time = '%s', end_time = '%s'",
        'table',
        $id,
        $id_jack,
        $startDate,
        $endDate,
        $startDate,
        $endDate);

我想如果我已经在表格中加上idid_jack的铭文,我只想更新开始和结束时间。你能帮我吗?现在我每次调用只有插入。

1 个答案:

答案 0 :(得分:0)

您的查询基本上应该没问题。 。 。虽然您应该使用所有值的参数。我会把它写成:

INSERT INTO %s (id, id_jack, start_time, end_time)
    VALUES (%d, %d, '%s', '%s')
    ON DUPLICATE KEY UPDATE start_time = VALUES(start_time)
                            end_time = VALUES(end_time);

这样,您不必复制参数(这可能导致错误)。

为此,您需要一个唯一的索引/主键。我不确定您是否需要(id, id_jack)或两个(id)(id_jack)。但是,这些需要与上述查询分开创建:

create unique index unq_t_id_idjack on t(id, idjack);