Отнять один столбец от другого с одной строки
Здраствуйте, проблема в следующем: У меня есть база данных в mysql, где есть список автомобилей с 2 столбцами - price и pay. Нужно чтобы price вычитался от pay в каждой строке для каждого автомобиля отдельно. Значения в price разные.
Сейчас код выглядит так:
$sum = $ulist['price'];
$query = "UPDATE cars SET pay = pay - $sum";
но от pay рассчитывается последние значение price последнего автомобиля.
Заранее спасибо
Ответы (2 шт):
Это решается довольно просто через 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');
}
?>