Ответы пользователя по тегу MySQL
  • Как правильно задать запрос UPDATE где название столбца переменная?

    Anastasia2306
    @Anastasia2306
    PHP-разработчик.
    Как насчет оператора CASE?

    $sql = "UPDATE `list` 
            SET count1 = CASE WHEN id = ? AND ? = 1 THEN count1 - ? ELSE count1 END,
                count2 = CASE WHEN id = ? AND ? = 2 THEN count2 - ? ELSE count2 END,
                count3 = CASE WHEN id = ? AND ? = 3 THEN count3 - ? ELSE count3 END
            WHERE id = ?";
    
    $stmt = $conn->prepare($sql);
    
    foreach ($data as $id => $value) {
        $idParts = explode("-", $id);
        $count = $value['count'];
        $stmt->execute([$idParts[0], $idParts[1], $count, $idParts[0], $idParts[1], $count, $idParts[0], $idParts[1], $count, $idParts[0]]);
    }


    Здесь используется оператор CASE для обновления нужного столбца в зависимости от значения $idParts[1]. Если $idParts[1] не соответствует ни одному из условий, то значение столбца остается неизменным. Ну и не забываем про подготовленный запрос prepare чтобы избежать возможной инъекции
    Ответ написан
    7 комментариев