при дублировании ключа для обновления только одной строки

#mysql #sql

#mysql #sql

Вопрос:

у меня есть следующий код для системы инвентаризации.

 $barc = mysqli_real_escape_string($con, $_POST['barc']);
$cant = mysqli_real_escape_string($con, $_POST['cant']);
$com = mysqli_real_escape_string($con, $_POST['com']);

$sql="INSERT INTO inventario (barc, cant, com)
VALUES ('$barc', '$cant', '$com')"
ON DUPLICATE KEY UPDATE barc=barc,cant=cant   $cant,com=com;

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";
  

я пытаюсь создать, если штрих-код существует, он добавляет старый «cant» новый «cant», но сохраняет все остальные данные.

но я получаю ошибку. я ценю любую помощь

Комментарии:

1. Ваша ON DUPLICATE KEY строка находится за пределами строки.

Ответ №1:

Синтаксис, который вы ищете, является:

 INSERT INTO inventario (barc, cant, com)
    VALUES ('$barc', '$cant', '$com')"
    ON DUPLICATE KEY UPDATE cant = concat(coalesce(cant, ''), coalesce($cant, ''));
  

Помимо помещения всего оператора SQL в одну строку, функция конкатенации в MySQL concat() . Я добавил coalesce() s для обработки NULL значений. Столбцы, не включенные, не изменятся.