\mysqli("localhost", "", "", "crm");
$mysqli->set_charset("utf8mb4");
$response = $mysqli->query("select SUM(spend),SUM(cards),SUM(accounts),SUM(apps),SUM(dolphin),SUM(coming),SUM(profit) from `stats` where who = '$user_tag' and DATE_FORMAT(time, '%Y-%m-%d')>=str_to_date('{$start_date}', '%Y-%m-%d') and DATE_FORMAT(time, '%Y-%m-%d')<=str_to_date('{$end_date}', '%Y-%m-%d') " );
if($response->num_rows > 0) {
$response = $response->fetch_all();
$response = ['spend' => $response[0][0] == null ? 0 : $response[0][0] , 'ekv' => (($response[0][0] * 5) / 100) == null ? 0 : (($response[0][0] * 5) / 100), 'cards' => $response[0][1] == null ? 0 : $response[0][1], 'accounts' => $response[0][2] == null ? 0 : $response[0][2] , 'apps' => $response[0][3] == null ? 0 : $response[0][3], 'dolphin' => $response[0][4] == null ? 0 : $response[0][4], 'out' => (
$response[0][0] + $response[0][1] + $response[0][2] + $response[0][3] + $response[0][4]
) == null ? 0 : (
$response[0][0] + $response[0][1] + $response[0][2] + $response[0][3] + $response[0][4]
), 'coming' => $response[0][5] == null ? 0 : $response[0][5]];
$response['out'] += (($response['spend'] * 5) / 100);
$response['profit'] = ($response['coming'] - $response['out']);
$response['roi'] = "".round(($response['coming'] - $response['out']) / $response['out'] * 100);
return $response;
}
Я в PHP и MySQL не шарю. Но по-моему, должен быть другой способ сравнения дат
Что-то вроде time>='date 00:00:00'. Без функции над time
Слава правильно написал, но пару добавлю: 1) Он не указал, только молча переписал получшэ — но создавать соединение к базе в каждой функцыи — это в корне неправильно. Дажэ при каждом обращении к страницэ не слишком хорошо — лучшэ использовать постоянное соединение. https://www.php.net/manual/en/mysqli.persistconns.php 2) where who = '$user_tag' Никогда так не делайте. Это путь к SQL injectuons. И дажэ если вы уверены, что в $user_tag не будет строчки "'; DROP DATABASE users;" — всё равно лучшэ передавать параметры запроса как параметры. 2) Вы зачем-то сначала получаете в response результат запроса, а затем его затираете своим рещультатом функцыи. Зачем? Пытаетесь сэкономить пару сотен байт на стэке? У вас не вышло. Это, в отличие от предыдущего — не ошыбка сама по себе, но разбирать такие подмены труднее и шанс ошыбок в будущем большэ.
К уже выше сказанному добавлю, что в этом случаи лучше использовать fetch_assoc вместо fetch_all. Это значительно улучшит читаемость кода
Обсуждают сегодня