Страница 1 из 2

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

Добавлено: 24 окт 2024, 13:15
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, ',', ' ');

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

Добавлено: 24 окт 2024, 14:35
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, ',', ' ');

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

Добавлено: 24 окт 2024, 14:42
Fait
field_310 - какой тип поля?

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

Добавлено: 24 окт 2024, 15:19
SalahievFR
php с сохранение значения в базу

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

Добавлено: 24 окт 2024, 15:46
Fait
SalahievFR писал(а): 24 окт 2024, 15:19 php с сохранение значения в базу
В таком случае php код должен сохранять значения без форматирования.
То есть без использования number_format и т.п.

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

Добавлено: 24 окт 2024, 15:54
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;

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

Добавлено: 24 окт 2024, 16:38
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? Эта строка совершенно лишняя)

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

Добавлено: 24 окт 2024, 18:04
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; должно быть судя документации.


Суть в том что код раньше работал. Что стало не понятно.

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

Добавлено: 24 окт 2024, 19:15
nruslan2
код месяц - в коде после м дефис стоит в условии!! '%m-'

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

Добавлено: 24 окт 2024, 21:00
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, ',', ' ');