У меня есть этот 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);
Я хочу, если у меня уже есть в таблице надпись с id
а также id_jack
Я хочу обновить только время начала и окончания. Не могли бы вы мне помочь? Теперь у меня есть только вкладыши на каждый звонок.
Ваш запрос в принципе должен быть в порядке. , , хотя вы должны использовать параметры для всех значений. Я бы написал это так:
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);
Других решений пока нет …