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

Как внести изменения в функцию `param_val_add`, чтобы правильно изменять столбец `is_del` на 1, не затрагивая значение столбца `val`, если переменная $value имеет значение NULL?
  • 20 апреля 2024 г. 12:20
Ответы на вопрос 2
Для изменения определенных записей в базе данных в зависимости от значения переменной, можно использовать SQL запрос с условием. 

Для примера, предположим, что у нас есть таблица `table_name` со столбцами `id`, `val` и `is_del`, и необходимо изменить значение столбца `is_del` на 1, если значение переменной `$value` равно NULL:

```php
function param_val_add($value) {
    // подключение к базе данных

    $query = "UPDATE table_name SET is_del = 1 WHERE val IS NULL";
    
    if ($value !== NULL) {
        $query .= " AND id = $value"; // дополнительное условие, если нужно задать конкретный id
    }
    
    // выполнение запроса к базе данных
}
```

В данном примере, если `$value` равно NULL, то происходит обновление значений столбца `is_del` в строках, где `val` равно NULL. Если же `$value` не равно NULL, то также добавляется условие по `id`.

Таким образом, в функции `param_val_add` вносим изменения в SQL запрос, чтобы учитывать значение переменной `$value` при формировании условия для обновления записей в базе данных.
<?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') ;


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