Пытаюсь посчитать поступление для конкретного товара.
Если напрямую в базе делать запрос, то я получаю ответ. В системе через php даже 0 нет.
Может кто разбирается ?
$product_id = [id];
$info_query = db_query("SELECT SUM(p.field_372) AS total_incoming FROM app_entity_40 p JOIN app_entity_38 a ON p.parent_item_id = a.id WHERE p.field_371 = {$product_id} AND a.field_340 = 88");
$info = db_fetch_assoc($info_query);
if ($info) {
$total_incoming = $info['total_incoming']; // Поступления (закупки)
// Выводим или используем данные
$output_value = $total_incoming;
} else {
// Если данных нет
$output_value = 0;
}
SalahievFR писал(а): 09 янв 2025, 01:29
Пытаюсь посчитать поступление для конкретного товара.
Если напрямую в базе делать запрос, то я получаю ответ. В системе через php даже 0 нет.
Может кто разбирается ?
$product_id = [id];
$info_query = db_query("SELECT SUM(p.field_372) AS total_incoming FROM app_entity_40 p JOIN app_entity_38 a ON p.parent_item_id = a.id WHERE p.field_371 = {$product_id} AND a.field_340 = 88");
$info = db_fetch_assoc($info_query);
if ($info) {
$total_incoming = $info['total_incoming']; // Поступления (закупки)
// Выводим или используем данные
$output_value = $total_incoming;
} else {
// Если данных нет
$output_value = 0;
}
$product_id = [id];
$info_query = db_query("select sum(p.field_372) as total_incoming from app_entity_40 p join app_entity_38 a on p.parent_item_id=a.id where p.field_371=".$product_id." and a.field_340=88");
$info = db_fetch_array($info_query); // Не надо использовать db_fetch_assoc
if ($info) {
$total_incoming = $info['total_incoming']; // Поступления (закупки)
// Выводим или используем данные
$output_value = $total_incoming;
} else {
// Если данных нет
$output_value = 0;
}
А вообще, запрос какой-то мудрёный, мне кажется, можно без JOIN обойтись спокойно.
select sum(field_372) as total_incoming from app_entity_40 where field_371=".$product_id." and parent_item_id in (select id from app_entity_38 where field_340=88)
SalahievFR писал(а): 09 янв 2025, 01:29
Пытаюсь посчитать поступление для конкретного товара.
Если напрямую в базе делать запрос, то я получаю ответ. В системе через php даже 0 нет.
Может кто разбирается ?
$product_id = [id];
$info_query = db_query("SELECT SUM(p.field_372) AS total_incoming FROM app_entity_40 p JOIN app_entity_38 a ON p.parent_item_id = a.id WHERE p.field_371 = {$product_id} AND a.field_340 = 88");
$info = db_fetch_assoc($info_query);
if ($info) {
$total_incoming = $info['total_incoming']; // Поступления (закупки)
// Выводим или используем данные
$output_value = $total_incoming;
} else {
// Если данных нет
$output_value = 0;
}
$product_id = [id];
$info_query = db_query("select sum(p.field_372) as total_incoming from app_entity_40 p join app_entity_38 a on p.parent_item_id=a.id where p.field_371=".$product_id." and a.field_340=88");
$info = db_fetch_array($info_query); // Не надо использовать db_fetch_assoc
if ($info) {
$total_incoming = $info['total_incoming']; // Поступления (закупки)
// Выводим или используем данные
$output_value = $total_incoming;
} else {
// Если данных нет
$output_value = 0;
}
А вообще, запрос какой-то мудрёный, мне кажется, можно без JOIN обойтись спокойно.
select sum(field_372) as total_incoming from app_entity_40 where field_371=".$product_id." and parent_item_id in (select id from app_entity_38 where field_340=88)
Написал такой код. Посмотрите, пожалуйста, можно ли улучшить (ускорить или упростить) запрос и подсчет остатков. Тут я в одном запросе получаю закуп и расход. А потом в php делаю вычисления и проверки.
$product_id = [id];
// Запрос для получения сумм поступлений и расходов
$query = "
SELECT
(SELECT SUM(field_372) FROM app_entity_40
WHERE field_371 = {$product_id} AND parent_item_id IN
(SELECT id FROM app_entity_38 WHERE field_340 = 88)) AS total_incoming,
(SELECT SUM(field_372) FROM app_entity_40
WHERE field_371 = {$product_id} AND parent_item_id IN
(SELECT id FROM app_entity_38 WHERE field_340 = 89)) AS total_outgoing
";
$result = db_query($query);
$info = db_fetch_array($result);
if ($info) {
$total_incoming = $info['total_incoming'] ?? 0; // Поступления (закупки)
$total_outgoing = $info['total_outgoing'] ?? 0; // Расходы
$remaining = $total_incoming - $total_outgoing; // Остаток
$output_value = $remaining;
} else {
$output_value = 0; // Нет данных
}