Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите улучшить PHP код (запросы к MySQL)

1 1 Ученик (111), закрыт 6 лет назад
Написал код)) работает, но вот смотрю на него и понимаю что это говнокод. Помогите сократить, может даже в 1 запрос получится?

// узнаем сколько всего заказов за 24 часа
$result = $db->prepare("SELECT count(*) as count FROM orders WHERE dateadd >= now() - INTERVAL 1 DAY");
$result -> execute();
$row = $result->fetch();
$orders_last24hours = $row['count'];

// узнаем сколько выполненных заказов за 24 часа
$result = $db->prepare("SELECT count(*) as count FROM orders WHERE dateadd >= now() - INTERVAL 1 DAY AND status = ''success");
$result -> execute();
$row = $result->fetch();
$processed_24hours = $row['count'];

// среднее время обработки заказа
$result = $db->prepare("SELECT AVG(TIMESTAMPDIFF(MINUTE,dateadd,processed)) as avgtime FROM orders WHERE dateadd >= now() - INTERVAL 1 DAY AND status = 'success'"); //dateadd и processed имеют тип datetime
$result -> execute();
$row = $result->fetch();
$avgtimeprocess = $row['avgtime'];
if ($avgtimeprocess > 60) { // перевод в часы
$avgtimeprocess = round($avgtimeprocess / 60, 1);
}
else {
$avgtimeprocess = round($avgtimeprocess);
}
Лучший ответ
Андрей Высший разум (425894) 6 лет назад
1. Зачем prepare / execute, если у тебя запросы вообще без параметров? В этом случае удобнее использовать query.

2. У тебя 2 запроса с идентичными WHERE. Можно объединить в один:

SELECT
COUNT(*) as count,
AVG(TIMESTAMPDIFF(MINUTE,dateadd,processed)) as avgtime
FROM
orders
WHERE
dateadd >= NOW() - INTERVAL 1 DAY AND status = ''success'

Если запросы имеют множество JOIN и выполняются слишком долго - тогда имеет смысл подумать об их разделении на несколько независимых запросов. А разделять простейшие запросы не имеет смысла - это только увеличит нагрузку на базу данных.
1 1Ученик (111) 6 лет назад
Спасибо! оба совета применил, работает)
Остальные ответы
Чайкин Виталий Мыслитель (7584) 6 лет назад
Все в порядке с кодом; Очень удобно и понятно, когда запросы разделены. Удобно отлаживать. А через какие-нибудь 10-15 дней легко понять что этот код делает ...Если же все запихнуть в один запрос, через 10 дней ты без пол-литра не вспомнишь - что вообще тут происходит ...
1 1Ученик (111) 6 лет назад
тоже верно) спс
Похожие вопросы