Отнять один столбец от другого с одной строки

Здраствуйте, проблема в следующем: У меня есть база данных в mysql, где есть список автомобилей с 2 столбцами - price и pay. Нужно чтобы price вычитался от pay в каждой строке для каждого автомобиля отдельно. Значения в price разные.

Сейчас код выглядит так:

$sum = $ulist['price'];
$query  = "UPDATE cars SET pay = pay - $sum";

но от pay рассчитывается последние значение price последнего автомобиля.

Заранее спасибо


Ответы (2 шт):

Автор решения: Pashok

Это решается довольно просто через sql. Следующий код вернёт вам вычтенное значение для каждой строки, кроме последней.

SELECT id, pay - price AS result FROM cars WHERE id != (SELECT MAX(id) FROM cars)

Ну и обновить БД можно просто расширив ваш update:

UPDATE cars SET pay = pay - $sum WHERE id != (SELECT a.id FROM (select MAX(id) AS id FROM cars) AS a)

Тут пришлось вложить select в select иначе sql не понимает запроса и выдаёт ошибку

Ошибка SQL (1093): You can't specify target table 'cars' for update in FROM clause

Обновление: Когда вы привели полный код, стало понятно почему так произошло. У вас этот запрос был в цикле, каждую итерацию он обновлял все данные на основании введённого значения. Надо либо ещё условие добавить AND id = $ulist['id'], либо можно сделать проще не получая предварительно цену и не проходясь циклом:

$query  = "UPDATE cars SET pay = pay - price WHERE id != (SELECT a.id FROM (select MAX(id) AS id FROM cars) AS a)";
$q = mysqli_query($as, $query);

Вот так должно сработать и вычесть прайс из пэй для всех записей, кроме последней. Её трогать не стал тк у Вас

от pay рассчитывается последние значение price последнего автомобиля.

→ Ссылка
Автор решения: Максим Вінтоняк

Это мой исходный код

<?php
$resultul = mysqli_query($as,"SELECT * FROM `cars`");           
while ($ulist = mysqli_fetch_assoc($resultul))

$sum = $ulist['price'];
{   
    
    $query  = "UPDATE cars SET pay = pay - $sum";
    $q = mysqli_query($as, $query);
    
header('location: ..\index.php');
}
?>
→ Ссылка