Я беру из базы данных строки соответствующие определенному Sale_id, в которых есть sum и высчитываю определенные процент из этих sum, по следующему принципу если Общий SUM всех выбранных строк, больше определенного числа то каждая sum каждой строки умножается на определенную величину и результат по каждой строке записывается в поле point. Вот код
function update_point ($arr)
{
global $link;
$name = mysqli_real_escape_string($link, $arr['name']);
$sale_id = mysqli_real_escape_string($link, $arr['sale_id']); //безопасность
if (!empty($name))
{
$query = "SELECT SUM(sum), sum FROM sale WHERE sale_id='$sale_id' ";
$q_point=mysqli_query($link, $query);
while($result = mysqli_fetch_assoc($q_point))
{
$SUM = $result['SUM(sum)'];
if ($SUM<1000)
{
$point = $result['sum']* 0.03;
$query2 = "UPDATE sale SET points='$point' WHERE sale_id='$sale_id'"; // баллый за процедуру
mysqli_query($link, $query2);
}
else
{
if ($SUM>=1000 && $SUM<3000)
{
$point = $result['sum']* 0.05;
$query2 = "UPDATE sale SET points='$point' WHERE sale_id='$sale_id'"; // баллый за процедуру
mysqli_query($link, $query2);
}
else
{
$point=$result['sum']*0.07;
$query2 = "UPDATE sale SET points='$point' WHERE sale_id='$sale_id'"; // баллый за процедуру
mysqli_query($link, $query2);
}
}
}
}
}
Но у меня почему то код, умножает на определенную величину sum не каждой строки, а только первой и получившееся значение вставляет уже в каждую строку. Мне же нужно, чтобы в каждую строку вставлялось значение соответствующее sum этой строки. Подскажите в чем моя ошибка
вероятно причина в том что вы обновляете значение для всех $sale_id, т.е. проблема в этих строках:
UPDATE sale SET points='$point' WHERE sale_id='$sale_id'
Вместо $sale_id должен быть непосредственно id обновляемой записи в таблице.
Примерное решение:
<?php
function update_point ($arr)
{
global $link;
$name = mysqli_real_escape_string($link, $arr['name']);
$sale_id = mysqli_real_escape_string($link, $arr['sale_id']); //безопасность
if (empty($name)) return;
$query = "SELECT SUM(sum), sum, id FROM sale WHERE sale_id='$sale_id' ";
$q_point=mysqli_query($link, $query);
while($result = mysqli_fetch_assoc($q_point))
{
$SUM = $result['SUM(sum)'];
if ($SUM<1000)
{
$point = $result['sum']* 0.03;
$query2 = "UPDATE sale SET points='$point' WHERE sale_id='$result[id]'"; // баллый за процедуру
mysqli_query($link, $query2);
} else {
if ($SUM>=1000 && $SUM<3000)
{
$point = $result['sum']* 0.05;
$query2 = "UPDATE sale SET points='$point' WHERE sale_id='$result[id]'"; // баллый за процедуру
mysqli_query($link, $query2);
} else {
$point=$result['sum']*0.07;
$query2 = "UPDATE sale SET points='$point' WHERE sale_id='$result[id]'"; // баллый за процедуру
mysqli_query($link, $query2);
}
}
}
}
В вашей выборке:
SELECT SUM(sum), sum FROM sale WHERE sale_id='$sale_id'
только одна строка, так как SUM(sum)
группирует ее и, собственно, показывает вам общую сумму. Чтобы теперь изменить все строки, берите каждое поле и умножайте на вычисленное значение:
//...
if (!empty($name)) {
$query = "SELECT SUM(sum), sum FROM sale WHERE sale_id='$sale_id' ";
$q_point = mysqli_query($link, $query);
while ($result = mysqli_fetch_assoc($q_point)) {
$SUM = $result['SUM(sum)'];
}
$point = $SUM < 1000 ? 0.03 : ($SUM < 3000 ? 0.05 : 0.07);
$query2 = "UPDATE sale SET points = points * $point WHERE sale_id = '$sale_id'";
mysqli_query($link, $query2);
}
//...
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как из одного файла записать в другой и нужно отредактировать определенные столбцы
так получилось, что я удалил страницу магазина в woocommerce с целью поменять страницу магазина, на свою страницу магазина, уже сверстаннуюУдалил...