Mysql запросов для уникальных и постоянных посетителей - PullRequest
1 голос
/ 22 апреля 2020

Я делаю диаграмму, которая будет отображать просмотры, уникальных посетителей и постоянных посетителей сайта за каждый день. На моей главной странице я регистрирую IP каждого посетителя и дату, когда он был записан. Для работы графика мне нужно 3 MySQL запросов, каждый из которых показывает одно значение для каждого дня.

Первый запрос будет выглядеть примерно так:
SELECT DATE_FORMAT(date,'%y-%m-%d'),COUNT(ip) FROM visits GROUP BY DATE_FORMAT(date,'%y-%m-%d')
Этот запрос будет просто Количество выходных IP-адресов, зарегистрированных в день.

Два следующих запроса будут сложнее. Для второго мне нужно считать каждый IP-адрес только один раз в день
Для третьего мне нужно учитывать только те IP-адреса, которые уже есть в базе данных.

Я обнаружил, что третий может быть выполнен с использованием чего-то подобного

SELECT date, 
   visits.ip 
FROM visits
   INNER JOIN (SELECT ip
               FROM   visits
               GROUP  BY ip
               HAVING COUNT(id) > 1) dup
           ON visits.ip = dup.ip

Однако я не мог понять, как реализовать подсчет записей в этом.
Как я могу сделать второй и третий запрос?
Я также открыт для PHP решений

1 Ответ

1 голос
/ 22 апреля 2020

Я бы переписал ваш первый запрос, чтобы использовать функцию date() для удаления временной части даты:

select date(v.date) date_day, count(v.ip) visits
from visits v
group by date_day

Ваш второй запрос просто count(distinct ...):

select date(v.date) date_day, count(distinct v.ip) distinct_visits
from visits v
group by date_day

Третий запрос может использовать exists:

select date(v.date) date_day, count(distinct v.ip) returning_visits
from visits v
where exists (select 1 from visits v1 where v1.ip = v.ip and v1.date < date(v.date))
group by date_day
...