PHP запрос суммы

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

PHP запрос суммы

Сообщение SalahievFR »

Подскажите, в чем моя ошибка, если за день сумма поля в записях определяется верно, а в запросе за месяц сумма уходит в 17 значные отрицательные цифры?

Изначально около месяца все было норм. После чего какая-то проблема была у хостинга, и как только они восстановили работу цифры поплыли.

День

Код: Выделить всё

$today = date("d.m.Y",time());  // дата Сегодня
$value = strtotime($today);

$chislo = "0";
$info_query = db_query("SELECT sum(field_310) AS zakaz FROM app_entity_22 WHERE from_unixtime(date_added,'%Y-%m-%d') = DATE(CURDATE())");


$info = db_fetch_array($info_query);
$chislo = $info['zakaz'];



$output_value = number_format($chislo, 0, ',', ' ');
Месяц:

Код: Выделить всё

$today = date("d.m.Y",time());  // дата Сегодня
$value = strtotime($today);

$chislo = "0";
$info_query = db_query("SELECT sum(field_310) AS zakaz FROM app_entity_22 WHERE from_unixtime(date_added,'%m-') = MONTH(NOW()) AND from_unixtime(date_added,'%Y') = YEAR(NOW())");


$info = db_fetch_array($info_query);
$chislo = $info['zakaz'];



$output_value = number_format($chislo, 0, ',', ' ');
Вложения
Безымянный.png
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 916
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: PHP запрос суммы

Сообщение Fait »

Дата хранится в базе в формате unix, соответственно все запросы по дате должны быть соответствующие.

Попробуйте этот код для расчёта за день:

Код: Выделить всё

$dt1 = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$dt2 = $dt1 + 86400;
$chislo = 0;
$info_query = db_query("select sum(field_310) as zakaz from app_entity_22 where date_added>=".$dt1." and date_added<".$dt2);
$info = db_fetch_array($info_query);
$chislo = $info['zakaz'];
$output_value = number_format($chislo, 0, ',', ' ');
Для месяца:

Код: Выделить всё

$dt1 = mktime(0, 0, 0, date('m'), 1, date('Y'));
$dt2 = $dt1 + 86400 * date('t');
$chislo = 0;
$info_query = db_query("select sum(field_310) as zakaz from app_entity_22 where date_added>=".$dt1." and date_added<".$dt2);
$info = db_fetch_array($info_query);
$chislo = $info['zakaz'];
$output_value = number_format($chislo, 0, ',', ' ');
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 916
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: PHP запрос суммы

Сообщение Fait »

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

Re: PHP запрос суммы

Сообщение SalahievFR »

php с сохранение значения в базу
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 916
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: PHP запрос суммы

Сообщение Fait »

SalahievFR писал(а): 24 окт 2024, 15:19 php с сохранение значения в базу
В таком случае php код должен сохранять значения без форматирования.
То есть без использования number_format и т.п.
Аватара пользователя
SalahievFR
Сообщения: 314
Зарегистрирован: 22 янв 2023, 10:14
Имя: Фанис Салахиев
Откуда: Россия Казань
Контактная информация:

Re: PHP запрос суммы

Сообщение SalahievFR »

Fait писал(а): 24 окт 2024, 14:35 Дата хранится в базе в формате unix, соответственно все запросы по дате должны быть соответствующие.

Попробуйте этот код для расчёта за день:

Код: Выделить всё

$dt1 = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$dt2 = $dt1 + 86400;
$chislo = 0;
$info_query = db_query("select sum(field_310) as zakaz from app_entity_22 where date_added>=".$dt1." and date_added<".$dt2);
$info = db_fetch_array($info_query);
$chislo = $info['zakaz'];
$output_value = number_format($chislo, 0, ',', ' ');
Для месяца:

Код: Выделить всё

$dt1 = mktime(0, 0, 0, date('m'), 1, date('Y'));
$dt2 = $dt1 + 86400 * date('t');
$chislo = 0;
$info_query = db_query("select sum(field_310) as zakaz from app_entity_22 where date_added>=".$dt1." and date_added<".$dt2);
$info = db_fetch_array($info_query);
$chislo = $info['zakaz'];
$output_value = number_format($chislo, 0, ',', ' ');
Не сработало. Такое же число как на моем скрине выводит.


А вот код поля 310:

Код: Выделить всё

 $price = preg_replace('/[^0-9]/', '', [216]);
$rashod = preg_replace('/[^0-9]/', '', [217]);
$zp_mastera = preg_replace('/[^0-9]/', '', [260]);

$price = (int)$price;
$rashod = (int)$rashod;
$zp_mastera = (int)$zp_mastera;

$value = $price - ($zp_mastera + $rashod);

$output_value = $value;
$current_field_value = $value;
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 916
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: PHP запрос суммы

Сообщение Fait »

SalahievFR писал(а): 24 окт 2024, 15:54 Не сработало. Такое же число как на моем скрине выводит.

А вот код поля 310:

Код: Выделить всё

 $price = preg_replace('/[^0-9]/', '', [216]);
$rashod = preg_replace('/[^0-9]/', '', [217]);
$zp_mastera = preg_replace('/[^0-9]/', '', [260]);

$price = (int)$price;
$rashod = (int)$rashod;
$zp_mastera = (int)$zp_mastera;

$value = $price - ($zp_mastera + $rashod);

$output_value = $value;
$current_field_value = $value;
1) Для чего применяется preg_replace в начале?
В полях 216, 217 и 260 хранятся не числа? Какой тип полей?
2) Преобразование в целочисленный тип производится с помощью функции intval($value), а не таким образом, как тут
3) Зачем тут $current_field_value? Эта строка совершенно лишняя)
Аватара пользователя
SalahievFR
Сообщения: 314
Зарегистрирован: 22 янв 2023, 10:14
Имя: Фанис Салахиев
Откуда: Россия Казань
Контактная информация:

Re: PHP запрос суммы

Сообщение SalahievFR »

Fait писал(а): 24 окт 2024, 16:38
SalahievFR писал(а): 24 окт 2024, 15:54 Не сработало. Такое же число как на моем скрине выводит.

А вот код поля 310:

Код: Выделить всё

 $price = preg_replace('/[^0-9]/', '', [216]);
$rashod = preg_replace('/[^0-9]/', '', [217]);
$zp_mastera = preg_replace('/[^0-9]/', '', [260]);

$price = (int)$price;
$rashod = (int)$rashod;
$zp_mastera = (int)$zp_mastera;

$value = $price - ($zp_mastera + $rashod);

$output_value = $value;
$current_field_value = $value;
1) Для чего применяется preg_replace в начале?
В полях 216, 217 и 260 хранятся не числа? Какой тип полей?
2) Преобразование в целочисленный тип производится с помощью функции intval($value), а не таким образом, как тут
3) Зачем тут $current_field_value? Эта строка совершенно лишняя)
1. Тип поле число с суффиксом « руб». Я убираю пробелы и буквы таким способом.
2. И без int пробовал. Разницы нет.
3. $current_field_value = $output_value; должно быть судя документации.


Суть в том что код раньше работал. Что стало не понятно.
nruslan2
Сообщения: 2517
Зарегистрирован: 14 окт 2020, 09:13
Имя: Ruslan
Откуда: Moscow
Контактная информация:

Re: PHP запрос суммы

Сообщение nruslan2 »

код месяц - в коде после м дефис стоит в условии!! '%m-'
Аватара пользователя
SalahievFR
Сообщения: 314
Зарегистрирован: 22 янв 2023, 10:14
Имя: Фанис Салахиев
Откуда: Россия Казань
Контактная информация:

Re: PHP запрос суммы

Сообщение SalahievFR »

Самый изначальный рабочий код

Код: Выделить всё

 $today = date("d.m.Y",time());  // дата Сегодня
$value = strtotime($today);

$chislo = "0";
$info_query = db_query("SELECT sum(field_310) AS zakaz FROM app_entity_22 WHERE from_unixtime(date_added,'%m-') = MONTH(NOW()) AND from_unixtime(date_added,'%Y') = YEAR(NOW())");


$info = db_fetch_array($info_query);
$chislo = $info['zakaz'];



$output_value = number_format($chislo, 0, ',', ' ');
Ответить