Запрос в базу не отображает ответ

Все вопросы/проблемы по установке и использовании.
Ответить
Аватара пользователя
SalahievFR
Сообщения: 387
Зарегистрирован: 22 янв 2023, 10:14
Имя: Фанис Салахиев
Откуда: Россия Казань
Контактная информация:

Запрос в базу не отображает ответ

Сообщение SalahievFR »

Пытаюсь посчитать поступление для конкретного товара.
Если напрямую в базе делать запрос, то я получаю ответ. В системе через 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;
}
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 1197
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич
Контактная информация:

Re: Запрос в базу не отображает ответ

Сообщение Fait »

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
Сообщения: 387
Зарегистрирован: 22 янв 2023, 10:14
Имя: Фанис Салахиев
Откуда: Россия Казань
Контактная информация:

Re: Запрос в базу не отображает ответ

Сообщение SalahievFR »

Спасибо огромное, оба варианты показывают верные результаты.
Аватара пользователя
SalahievFR
Сообщения: 387
Зарегистрирован: 22 янв 2023, 10:14
Имя: Фанис Салахиев
Откуда: Россия Казань
Контактная информация:

Re: Запрос в базу не отображает ответ

Сообщение SalahievFR »

Fait писал(а): 09 янв 2025, 10:23
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; // Нет данных
}
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 1197
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич
Контактная информация:

Re: Запрос в базу не отображает ответ

Сообщение Fait »

Думаю, хорошо получилось, быстрее наверное некуда уже)
Аватара пользователя
SalahievFR
Сообщения: 387
Зарегистрирован: 22 янв 2023, 10:14
Имя: Фанис Салахиев
Откуда: Россия Казань
Контактная информация:

Re: Запрос в базу не отображает ответ

Сообщение SalahievFR »

Fait писал(а): 10 янв 2025, 16:54 Думаю, хорошо получилось, быстрее наверное некуда уже)
Спасибо за ответ.)
Ответить