Как посчитать общую стоимость всех заказов одного клиента, учитывая, что в таблицах "dogovor" и "catalog" есть поля с названием товара и его ценой?
Для объединения данных из таблицы по общему столбцу и вычисления их суммы, можно использовать оператор JOIN в SQL запросе. Например, если у нас есть таблицы "dogovor" и "catalog", и мы хотим посчитать общую стоимость всех заказов одного клиента, то можно выполнить следующий запрос: SELECT SUM(catalog.price) AS total_price FROM dogovor JOIN catalog ON dogovor.product_name = catalog.product_name WHERE dogovor.client_name = 'Имя клиента'; В данном запросе мы соединяем таблицы "dogovor" и "catalog" по полю с названием товара. Затем мы выбираем сумму цен товаров из таблицы "catalog" для всех заказов, сделанных определенным клиентом (задаем имя клиента в условии WHERE). Таким образом, после выполнения этого запроса, мы получим общую стоимость всех заказов одного клиента.
<pre><code class="php">// Выберем все заказы клиента
$result7 = $mysql->query("SELECT * FROM `dogovor` WHERE `id_client` = '$id_client'");
// Переменная для хранения общей стоимости заказов
$total_price = 0;
// Пройдемся по каждому заказу клиента
while ($row7 = $result7->fetch_assoc()) {
$name_product = htmlspecialchars($row7['Name_Product']);
// Выберем стоимость товара из каталога
$result8 = $mysql->query("SELECT `Price_sim` FROM `catalog` WHERE `Name_Product` = '$name_product'");
// Переменная для хранения стоимости конкретного заказа
$order_price = 0;
// Если нашли товар в каталоге
if ($row8 = $result8->fetch_assoc()) {
// Добавляем стоимость товара к общей стоимости заказа
$order_price = $row8['Price_sim'];
}
// Добавляем стоимость текущего заказа к общей стоимости всех заказов клиента
$total_price += $order_price;
}
// Выводим общую стоимость всех заказов клиента
echo "Общая стоимость всех заказов клиента: $total_price";</code></pre>
<pre><code class="php">/* создание подготавливаемого запроса */
$stmt = $mysql->prepare("select sum(c.`Price_sim`) as price_sim_sum
from `dogovor` d
join `catalog` c on c.`Id_Product` = d.`Id_product`
where `id_client` = ?");
/* связывание параметров с метками */
$stmt->bind_param("i", $id_client);
$result = $stmt->execute();
$row = $result->fetch_accos();
if($row)
{
echo 'Общая стоимость всех заказов клиента: '.$row['price_sim_sum'];
}
else
{
echo 'Запрос не дал результата!';
}</code></pre> <br/> Ошибки в вашем решении: <br/> 1) Небезопасная подстановка параметров в запросы. Неумение использовать в этой ситуации подготовленные запросы. <br/> 2) Использование id_client как строкового параметра, если он состоит из цифр, то целесообразно использовать целочисленный тип в колонке таблицы. <br/> 3) Неиспользование агрегированных функций среды sql. Зачем на php плодить лишние циклы, когда сумму можно посчитать "из коробки"? <br/> 4) Связывание таблиц по наименованию сущности, а не по его идентификатору. Рационально связывать по id_product вместо name_product.