Задать вопрос
razrab228
@razrab228
зачем тебе знать это?

Как обновить определенные значения в базе, в зависимости от значения переменной?

Есть такая таблица:

param_id | obj_id | val | is_del

и единственная функция php для изменения значения в базе.

есть 2 случая, когда вызывается эта функция:
при изменении значения:
param_val_add($param_id, $obj_id, $value);
и при удалении значения:
param_val_add($param_id, $obj_id, NULL);

внутри функции есть переменная $is_del, обычно она равна 0, но если пришло значение NULL, то она равна 1.

в функции есть вот такой запрос:
$query = "INSERT INTO vals (param_id, obj_id, val, is_del) VALUES($param_id, $obj_id, $value, $is_del) ON DUPLICATE KEY UPDATE `is_del` = $is_del, `val` = $value";


но если переменная удалена, то и значение записи становится пустым, а надо менять только is_del на 1.
Как можно это реализовать?
  • Вопрос задан
  • 43 просмотра
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
<?php

function param_val_add($pdo, $param_id, $obj_id, $value) {
    if ($value) {
        $query = 
            "INSERT INTO vals (
                `param_id`, `obj_id`, `val`, `is_del`
            ) VALUES (
                :param_id, :obj_id, :value, 0
            ) ON DUPLICATE KEY UPDATE 
                `is_del` = VALUES(is_del), 
                `val` = VALUES(val)";
                
        $stmt = $pdo->prepare($query);
        
        return $stmt->execute([
                ':param_id' => $param_id,
                ':obj_id' => $obj_id,
                ':value' => $value
            ]);
    } else {
        $query = "UPDATE vals SET `is_del` = 1 WHERE param_id = :param_id AND obj_id = :obj_id";
        
        $stmt = $pdo->prepare($query);
        
        return $stmt->execute([
                ':param_id' => $param_id,
                ':obj_id' => $obj_id
            ]);
    }
}

param_val_add($pdo, 1, 1, 'value') ;


Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы