Mysql уменьшить значения одной строки, если они больше чем-то - PullRequest
0 голосов
/ 11 апреля 2019

Я хотел бы знать, как я могу это сделать:

У меня есть таблица Mysql с десятками столбцов, которые я хотел бы обновить.Но это обновление касается всех столбцов одной строки.Поэтому мне нужно обновить каждый столбец этой конкретной строки, чтобы, если их значение было больше, чем ссылка, их значение уменьшилось на 1.

Пока все, что я могу придумать, это что-то вроде этогоно, очевидно, это ересь:

    $sql= mysqli_query($con,"UPDATE table SET columnA = columnA-1 WHERE (columnA > ".$val." AND id = 1 ");
    $sql= mysqli_query($con,"UPDATE table SET columnB = columnB-1 WHERE (columnB > ".$val." AND id = 1 ");  
    $sql= mysqli_query($con,"UPDATE table SET columnC = columnC-1 WHERE (columnC > ".$val." AND id = 1 ");
    .....(22 times)....
    $sql= mysqli_query($con,"UPDATE table SET columnZ = columnZ-1 WHERE (columnZ > ".$val." AND id = 1 ");

Итак:

1) Синтаксис в порядке, чтобы выполнить мое требование (ниже на 1, если значение больше, чем $ val?

2): Как я могу не обращаться к базе данных столько раз, чтобы обновить все столбцы одной строки?возможно ли это только?

Спасибо за помощь.

1 Ответ

1 голос
/ 11 апреля 2019

Вы можете использовать выражение CASE здесь:

UPDATE yourTable
SET
    columnA = CASE WHEN columnA > val THEN columnA - 1 ELSE columnA END,
    columnB = CASE WHEN columnB > val THEN columnB - 1 ELSE columnB END,
    columnC = CASE WHEN columnC > val THEN columnC - 1 ELSE columnC END,
    ...
WHERE
    id = 1;

Это решение также устраняет проблему, связанную с выполнением большого количества отдельных обращений в базу данных и из нее. Вместо этого вышеприведенное обновление будет выполняться как отдельный оператор / транзакция.

...