Как минусить из нескольких полей MySQL определенное значение

Я пишу продукты на складе сценарий. У меня есть MySQL таблица «products_stock»:

id   zid   pid  amount
1    123   321   1
2    124   321   5
4    124   566   7
3    125   321   10

Итак, общее количество товара id = 321 на складе равно 16. Кто-то делает заказ с pid = 321 и qty = 7.
Мне нужна PHP-функция, которая будет минус 7 из столбца количество начиная с первого ZID, и обновить записи в таблице products_stock так, чтобы это выглядело так:

id   zid   pid  amount
1    123   321   0
2    124   321   0
4    124   566   7
3    125   321   9

Что я пытался сделать:

function mysql_fields_minus_value ($pid, $amount) {
$q_select_stock_data = "SELECT * FROM `products_stock` WHERE `pid` = '".$pid."'";
$r_select_stock_data = mysql_query($q_select_stock_data);
if (mysql_num_rows($r_select_stock_data)>0) { // First we check if there is such product in stock
// Then we go through all records which have that pid
while ($a_select_stock_data=mysql_fetch_array($r_select_stock_data)) {
//                            echo "<p>".$a_select_stock_data['stock']."</p>";
$product_pid = $a_select_stock_data['sku'];
$product_qty_order = 7; // qty of pid in order
// than we check if we have enough qtys of product in stock
if ($a_select_stock_data['amount'] - $amount)>=0)       { // ok- enough

С этого момента я застрял.

Спасибо за ответы!

-6

Решение

Для этого нет функции, вам нужно будет перебирать все строки, пока вы не закончите. Я рекомендую вам получить строки из БД с PID, который вы хотите упорядочить по ZID ascendent. После этого попробуйте сделать что-то подобное:

$i = 0;
while($qty > 0 && $i < count($rows)) {
if ($row[$i]['amount'] >= $qty) {
$row[$i]['amount'] -= $qty;
$qty = 0;
}
else {
$qty -= $row[$i]['amount'];
$row[$i]['amount'] = 0;
}
++$i;
}

После этого вы можете снова сохранить значения в БД.

РЕДАКТИРОВАТЬ: попробуйте использовать PDO или MySQL вместо MySQL, чтобы получить строки из БД.

0

Другие решения

Вы не далеко от достижения своей цели. Что вам нужно сделать, это изменить синтаксис MySQL с SELECT заявление, чтобы UPDATE заявление.

Эта строка:

$q_select_stock_data = "SELECT * FROM `products_stock` WHERE `pid` = '".$pid."'";

Должно быть:

$q_select_stock_data = "UPDATE `products_stock` SET `amount` = '".$qty."'
WHERE `pid` = '".$pid."'";

Теперь вам нужно будет вызывать эту функцию с каждым pid Вы хотели бы обновить. Я предлагаю что-то вроде этого 🙁 Имея в виду, что my_sql Команды теперь устарели, и нам также необходимо предоставить функции объект подключения к базе данных.

function delete_record($db, $qty, $pid){
mysqli_query($db, "UPDATE `products_stock` SET `amount` = '".$qty."'
WHERE `pid` = '".$pid."'");
}
0

По вопросам рекламы [email protected]