/* создание подготавливаемого запроса */
$stmt = $mysql->prepare("select sum(c.`Price`) as price_sum
from `dogovor` d
join `catalog` c on c.`Id_Product` = d.`Id_Product`
where d.`id_client` = ?");
/* связывание параметров с метками */
$stmt->bind_param("i", $id_client);
/* выполнение запроса */
$result = $stmt->execute();
/* выборка результатов */
$row = $result->fetch_accos();
if($row)
{
echo 'Общая стоимость всех заказов клиента: '.$row['price_sum'];
}
else
{
echo 'Запрос не дал результата!';
}
SELECT p.price, od.quantity,
p.price * od.quantity as cost -- в выборке можно не только поля выбирать, но и делать любые сложные матем. операции в пределах сопоставляемых строк и агрегированных функций
FROM products p
JOIN orderdetails od ON p.productid = od.productid -- ну, так соединяйте по ключам. Что мешает?
Where od.orderid = ? -- если нужно ограничиться в пределах заказа
update orderdetails
set orderdetails.totalcost = ( select p.price * orderdetails.quantity
from products p
where orderdetails.productid = p.productid
) -- вычисляем цену из таблицы продуктов и изменяем ее в деталях
where orderdetails.orderid = ? -- если нужно ограничиться в пределах заказа
and exists (select 1
from products p
where orderdetails.productid = p.productid
) -- выбираем детали заказа только по тем продуктам, которые есть в продуктах, можно добавить доп. ограничения по затрагиваемым деталям
update orderdetails
set orderdetails.totalcost = ( select p.price * new.quantity
from products p
where orderdetails.productid = p.productid
) -- вычисляем цену из таблицы продуктов и изменяем ее в деталях
where orderdetails.orderdetailid = new.orderdetailid
К сайту нужно подключить БД
this.content.querySelectorAll('.cell').forEach((cell) => {
let timer = null; // дескриптор отложенного обработчика одного клика
cell.addEventListener('click', (e) => {
if(timer)
clearTimeout(timer); // при каждом клике сбрасываем отложенный обработчик обработки одного клика
if(e.detail == 1) // на первом клике устанавливаем отложенный обработчик
timer = setTimeout(handleClickCell, 250); // Выполнение функции по одинарному клику после ожидания второго клика 250мс
if(e.detail == 2) // на втором - выполнение обработчика двойного клика
{
// благодаря счетчику detail в ивенте можем посчитать длину очереди непрерывных кликов, и в нужный момент выполнить функцию на втором клике
console.log('111');
}
} );
});
transition: all 0.6s;
Asus RT-G32 или WL-520GC
Каждая табличка - это отдельный файл SQL.
(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) == 0
abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) <= eps
SELECT o.id, o.variant_id,
/* vp.variant_id, */ -- заджойненные id дублировать в выборке не нужно, если, конечно, не хотите наблюдать null-значения по другую сторону присоединения таблицы vp
vp.quantity AS quantity_result,
sum(vp.quantity) over (partition by vp.variant_id) as sum_by_variant_id -- сумма в пределах партиции variant_id
FROM orders AS o
LEFT JOIN variant_products AS vp ON vp.variant_id = o.variant_id
LEFT JOIN products AS p ON p.id = vp.product_id
LEFT JOIN product_types AS pt ON pt.id = p.type_id
/*WHERE */ and pt.id NOT IN (1, 2) -- если напишите в where, то выборка усечется до такого условия с pt.id. Но если напишите это условие в left join, то выберутся все Order, но где pt.id IN (1, 2) будут null значения.
SELECT o.id, o.variant_id,
/* vp.variant_id, */ -- заджойненные id дублировать в выборке не нужно, если, конечно, не хотите наблюдать null-значения по другую сторону присоединения таблицы vp
sum(vp.quantity) as sum_by_variant_id -- сумма в пределах группировки o.id, o.variant_id
FROM orders AS o
LEFT JOIN variant_products AS vp ON vp.variant_id = o.variant_id
LEFT JOIN products AS p ON p.id = vp.product_id
LEFT JOIN product_types AS pt ON pt.id = p.type_id
/*WHERE */ and pt.id NOT IN (1, 2) -- если напишите в where, то выборка усечется до такого условия с pt.id. Но если напишите это условие в left join, то выберутся все Order, но где pt.id IN (1, 2) будут null значения.
group by o.id, o.variant_id /*, vp.variant_id */