Function getUserStatsByPeriod($user_tag, $start_date, $end_date){ $mysqli = new

\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;
}

4 ответов

47 просмотров

Я в PHP и MySQL не шарю. Но по-моему, должен быть другой способ сравнения дат

Ivanov
Я в 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. Это значительно улучшит читаемость кода

Похожие вопросы

Обсуждают сегодня

Hi! Could you please upvote my new notebook? thanks a lot. https://www.kaggle.com/code/melissamonfared/anime-character-generation-dsgan-gan
məru
4
upvote plz https://www.kaggle.com/code/bassetkerouche/swapping-face?scriptVersionId=207300096
benkerrouche Statoinary
1
-- Привет всем. -- Есть csv, проблема в том что он содержит очень много повторов по столбцам и по строкам. -- Решил перекинуть это в базу данных, чтобы было проще. Но я не ша...
Oleg Ivanov
1
Как считаете - вопрос на собесе: «Как быстрее всего запустить ec2 машину в aws (в чистом аккаунте) и показать вывод от любой команды с нее» не очень ли сложный для условного м...
Sergey
50
Господа, у меня вопрос. Что вообще такое этот ваш data science и data scientists? А то гуглю, а мне какую-то расплывчатую фигню говорят.
Inkosta
44
Hi could you please help me with my two new projects? https://www.kaggle.com/code/hesankazemnia/rice-image-classification-cnn-pytorch https://www.kaggle.com/code/hesankazemnia...
Hesan
6
Исходя из ваших комментариев, получается, что чтобы получить марты в CH из данных в PG, неправильно тянуть сырые данные в CH и там их обрабатывать, лепить справочники и джойни...
unhingedlunatic
42
hi, Can you upvote? https://www.kaggle.com/code/durjoychandrapaul/rag-q-a-system-by-langchain-huggingface-for-pdf?scriptVersionId=204704280
A
1
Could you upvote and comment please? https://www.kaggle.com/code/tatianapetrushkevich/beginner-images https://www.kaggle.com/code/tatianapetrushkevich/python-for-beginners1 ...
Tazziyana
7
Коллеги, приветствую! Появилась не совсем тривиальная задача реализовать в nginx редирект HTTPS —> HTTP. Да, именно так, а не наоборот. Мы разрабатываем embedded устройство,...
Никита
24
Карта сайта