Как получить статистические данные из базы данных?

Каким образом можно вывести статистику для сегодняшнего дня, вчерашнего дня, недели и месяца? Мой друг ранее показал мне способ вывода для сегодняшнего дня, но я испытываю трудности с пониманием того, как вывести для других периодов. Вот пример кода, который используется для сегодняшнего дня: <pre><code>$today = mysql_result(mysql_query("
SELECT 
count(*) 
FROM 
statistics_couter_visit 
WHERE 
date &gt;= ".(mktime(0, 0, 0, date('m'), date('d'), date('Y')))
)
,0);</code></pre> Как можно адаптировать его для вывода статистики за другие периоды времени? Спасибо!
  • 7 августа 2024 г. 4:03
Ответы на вопрос 3
Для вывода статистики для вчерашнего дня, недели и месяца вы можете использовать следующие запросы:

1. Для вчерашнего дня:
```php
$yesterday = mysql_result(mysql_query("
SELECT 
count(*) 
FROM 
statistics_couter_visit 
WHERE 
date >= ".(mktime(0, 0, 0, date('m'), date('d')-1, date('Y'))) . " AND date < ".(mktime(0, 0, 0, date('m'), date('d'), date('Y')))
), 0);
```

2. Для недели:
```php
$week = mysql_result(mysql_query("
SELECT 
count(*) 
FROM 
statistics_couter_visit 
WHERE 
date >= ".(mktime(0, 0, 0, date('m'), date('d')-7, date('Y')))
), 0);
```

3. Для месяца:
```php
$month = mysql_result(mysql_query("
SELECT 
count(*) 
FROM 
statistics_couter_visit 
WHERE 
MONTH(date) = MONTH(CURDATE()) AND YEAR(date) = YEAR(CURDATE())
), 0);
```

Эти запросы будут выводить статистику для вчерашнего дня, недели и текущего месяца соответственно. Вы можете адаптировать их по своему усмотрению, добавляя или изменяя условия в запросах для получения нужной вам статистики. Не забудьте также обновить свой код на использование безопасных методов доступа к базе данных, таких как PDO или MySQLi.
Несколько Count + умение обращаться с временнЫми функциями, и у вас получится универсальный запрос со статистикой: 
select count(case when scv.date >= CURDATE() then 1 end) today_count,
       count(case when scv.date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) and scv.date < CURDATE() then 1 end) yesterday_count,
       count(case when scv.date >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK) then 1 end) week_count,
       count(case when scv.date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) then 1 end) month_count
from statistics_couter_visit as scv
where scv.date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) -- тут ограничение по макс. окну просмотра статистики, то есть по month_count

PS: Естественно, по полю scv.date должен быть создан индекс.
Что это за статистика? 

Если имеется ввиду статистика использования БД, то есть специальная схема performance_schema - пиши к ней запросы.

Но скорее всего, ты имеешь ввиду статистику своего сайта/приложения/API (в общем прикладного использования).
Это уже более сложная тема, т.к. необходимо:
- Спроектировать механизм сбора статистики - API/эндпоинты/функциии
- Спроектировать БД для ее хранения - таблицы/схемы + запросы

Также не забывай, что статистики накапливается очень много и тебе потребуются оптимизации разные. Тут тоже не очень просто:
- Для хранения статистики - разные БД (скорее всего у тебя реляционная, но для статистики лучше использовать nosql БД, например, временных рядов)
- Необходимо знать особенности этой БД, т.к. нагрузки возможно будут высокими
- Принять во внимание то, что место может просто закончиться и другие неожиданные ситуации

Просто так на твой вопрос не ответить, т.к. под каждую ситуацию свое решение
Похожие вопросы