@6Mkfcbpwamxx

Как будет правильней?

Существует таблица "history", в ней есть столбцы "time" (в нем храниться время добавления записи в базу в формате 2021-11-30 00:00:00) и Profit. Я написал вот такой код:

header('Content-Type: application/json');
	date_default_timezone_set('Europe/Moscow');
	$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
	$query = "SELECT `time`, `Profit` FROM `history` WHERE `type` = 1";
	$result = $mysqli->query($query);

	while ($record = $result->fetch_row()){

		$date0 = date('d.m.Y', time());
		$date1 = new DateTime('-1 days');
		$date2 = new DateTime('-2 days');
		$date3 = new DateTime('-3 days');
		$date4 = new DateTime('-4 days');
		$date5 = new DateTime('-5 days');
		$date6 = new DateTime('-6 days');

		if ($date0 == date('d.m.Y', strtotime($record[0]))){
			$day = $date0;
			$profit = $profit + $record[1];
			continue;
		} elseif ($date1->format('d.m.Y') == date('d.m.Y', strtotime($record[0]))) {
			$day1 = $date1->format('d.m.Y');
			$profit1 = $profit1 + $record[1];
			continue;
		} elseif ($date2->format('d.m.Y') == date('d.m.Y', strtotime($record[0]))) {
			$day2 = $date2->format('d.m.Y');
			$profit2 = $profit2 + $record[1];
			continue;
		} elseif ($date3->format('d.m.Y') == date('d.m.Y', strtotime($record[0]))) {
			$day3 = $date3->format('d.m.Y');
			$profit3 = $profit3 + $record[1];
			continue;
		} elseif ($date4->format('d.m.Y') == date('d.m.Y', strtotime($record[0]))) {
			$day4 = $date4->format('d.m.Y');
			$profit4 = $profit4 + $record[1];
			continue;
		} elseif ($date5->format('d.m.Y') == date('d.m.Y', strtotime($record[0]))) {
			$day5 = $date5->format('d.m.Y');
			$profit5 = $profit5 + $record[1];
			continue;
		} elseif ($date6->format('d.m.Y') == date('d.m.Y', strtotime($record[0]))) {
			$day6 = $date6->format('d.m.Y');
			$profit6 = $profit6 + $record[1];
			continue;
		}
		
	}
	
	$all[] =  array('time' => isset($day) ? $day : '0', 'Profit' => isset($profit) ? $profit : '0');
	$all[] =  array('time' => isset($day1) ? $day1 : '0', 'Profit' => isset($profit1) ? $profit1 : '0');
	$all[] =  array('time' => isset($day2) ? $day2 : '0', 'Profit' => isset($profit2) ? $profit2 : '0');
	$all[] =  array('time' => isset($day3) ? $day3 : '0', 'Profit' => isset($profit3) ? $profit3 : '0');
	$all[] =  array('time' => isset($day4) ? $day4 : '0', 'Profit' => isset($profit4) ? $profit4 : '0');
	$all[] =  array('time' => isset($day5) ? $day5 : '0', 'Profit' => isset($profit5) ? $profit5 : '0');
	$all[] =  array('time' => isset($day6) ? $day6 : '0', 'Profit' => isset($profit6) ? $profit6 : '0');

	$mysqli->close();

	echo json_encode($all);

То есть, получаем профиты за 7 дней.
В результате получаем:

[{"time":"30.11.2021","Profit":10},{"time":"29.11.2021","Profit":26},{"time":"28.11.2021","Profit":12},{"time":"27.11.2021","Profit":10},{"time":"26.11.2021","Profit":13},{"time":"25.11.2021","Profit":13},{"time":"24.11.2021","Profit":13}]

Работает все именно так как мне нужно. Потом из этих данных я строю столбчатую диаграмму. Но мне кажется, что сам скрипт получения данных из базы написан немного не правильно (хоть все и работает). Повелитель опытом, как бы Вы сделали?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Уважаемый, Вам нужно изучать основы MySQL. Ваша задача решается одним запросом и 3-мя строками кода.

<?php
  $query = "SELECT  DATE(`time`) `Day`, SUM(`Profit`) `DaylyProfit`
			FROM `history`
			WHERE  `type` = 1 AND `time` > DATE_SUB(CURRENT_DATE, INTERVAL 6 DAY)
			GROUP BY `Day`
			ORDER BY `Day` DESC;";

$result = $mysqli->query($query);

$all = $result -> fetch_all(MYSQLI_ASSOC);


echo json_encode($all);


Test PHP MySQL online
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы