Страница 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, ',', ' ');