Как посчитать общую стоимость всех заказов одного клиента, учитывая, что в таблицах "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). Таким образом, после выполнения этого запроса, мы получим общую стоимость всех заказов одного клиента.
// Выберем все заказы клиента $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";
/* создание подготавливаемого запроса */ $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 'Запрос не дал результата!'; }
Ошибки в вашем решении:
1) Небезопасная подстановка параметров в запросы. Неумение использовать в этой ситуации подготовленные запросы.
2) Использование id_client как строкового параметра, если он состоит из цифр, то целесообразно использовать целочисленный тип в колонке таблицы.
3) Неиспользование агрегированных функций среды sql. Зачем на php плодить лишние циклы, когда сумму можно посчитать "из коробки"?
4) Связывание таблиц по наименованию сущности, а не по его идентификатору. Рационально связывать по id_product вместо name_product.