Maria DB SQL Вставка INTO ON DUPLICATE работает только для первого обновленного значения - PullRequest
0 голосов
/ 27 января 2020

Я использую этот http://www.phpzag.com/create-live-editable-table-with-jquery-php-and-mysql/ в качестве шаблона для редактирования двух столбцов в моей таблице. Отредактированные записи сохраняются в новой таблице SQL и вызываются с помощью уникального идентификатора ключа.

При каждом редактировании, где идентификатор не существует в SQL, мне нужно создать идентификатор, поэтому вместо этого просто ОБНОВИТЬ :

UPDATE notes SET $update_field WHERE shop_order='" . $input["SHOP_ORDER_NO"] . "'"

оператор в SQL Я хочу проверить, существует ли ID и, если да, просто обновить отредактированное значение, в противном случае создайте ID и обновите значение. Приведенный выше оператор обновления работает при создании идентификатора.

Приведенный ниже код обновляет только значение «priority», а не примечание при редактировании. Также, когда я редактирую «примечание», он не будет создавать новый идентификатор. Я пытался понять это в течение получаса без успеха.

<?php

include_once("db_connect.php");

$input = filter_input_array(INPUT_POST);
$poznamka = $input['note'];

if ($input['action'] == 'edit') {

    $update_field='';

    if(isset($input["priority"])) {
        $update_field.= "priority='".$input["priority"]."'";
    } else if(isset($input["note"])) {
        $update_field.= "note='".$input["note"]."'";
    }

    if($update_field && $input["SHOP_ORDER_NO"]) {  
        $sql_query = "INSERT INTO notes (shop_order,priority,note) 
        VALUES ('" . $input["SHOP_ORDER_NO"] . "','" . $input["priority"] . "','" . $input["note"] . "')
        ON DUPLICATE KEY UPDATE $update_field ";

        mysqli_query($conn, $sql_query) or die("database error:".mysqli_error($conn));
    }
}
?>

1 Ответ

0 голосов
/ 02 февраля 2020

В этой ссылке отсутствуют некоторые вещи, например PRIMARY KEY. И IODKU зависит от ключа UNIQUE, который обычно представляет собой другой столбец.

Ваше утверждение будет действовать только для строки, при условии, что для некоторого ключа UNIQUE существует только одно повторяющееся значение. Пожалуйста, предоставьте SHOW CREATE TABLE и сгенерированный SQL, чтобы мы могли указать на особенности.

Прочтите онлайн-документы об использовании ... UPDATE id = LAST_INSERT_ID(id) в качестве ключа для получения нового или старого идентификатора auto_increment.

Если вам нужно применить IODKU к нескольким строкам, см. Синтаксис

INSERT INTO t (col1, col2, ...)
    ON DUPLICATE KEY UPDATE ...
    SELECT ((multiple rows from somewhere else));

Однако это не может предоставить идентификаторы auto_increment для каждой новой / существующей строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...