У меня есть таблица, которая регистрирует посетителей по IP-адресу, дате первого посещения и дате последнего посещения для нескольких веб-сайтов. Обе даты представлены в формате datetime 2016-08-07 12:14:44
, Каждая запись относится к ссылке на сайт.
Я пытаюсь перечислить последние 6 месяцев по годам и месяцам, как (Y-m)
2016-08
2016-07
2016-06
так далее…
Мне удалось сделать это, хотя я борюсь за код для подсчета различных посетителей, вот что я до сих пор:
$this_month = date('Y-m');
$count = mysqli_query($conn, "SELECT COUNT(ip_address)) as count FROM `all_website_stats` WHERE `website_ref` = '$show_website_ref' AND EXTRACT(YEAR_MONTH FROM date_first_viewed) = '$this_month' AND `date_first_viewed` = `date_last_viewed`");
$rowcount=mysqli_num_rows($count);
echo $rowcount;
Это будет выполнено 6 раз, чтобы получить окончательное количество посетителей, которые не вернулись. Хотя этот код возвращает ошибки. И когда мне удалось заставить это работать, это только посчитало 1
или же 0
что неверно.
Он показал ошибку, как только я добавил date_first_viewed = date_last_viewed
что, наверное, неправильно. Хотя мне нужно убедиться, что date_first_visited
такой же как date_last_visited
в базе данных, иначе результат — возвращающийся посетитель.
Может ли кто-нибудь указать мне правильное направление и сообщить, что я делаю неправильно? Я не очень хорош в таких проверках даты с MySQL.
Вы говорите, что хотите всех уникальных посетителей в месяц. Однако я бы описал ваш запрос как получение всех разовых посетителей в месяц. Если это так, кажется, вам нужно GROUP BY
:
SELECT EXTRACT(YEAR_MONTH FROM date_first_viewed) as yyyymm,
COUNT(ip_address)) as count
FROM `all_website_stats` aws
WHERE `website_ref` = '$show_website_ref' AND
`date_first_viewed` = `date_last_viewed`
GROUP BY EXTRACT(YEAR_MONTH FROM date_first_viewed);
Вы можете добавить условие к WHERE
предложение, чтобы указать период времени для возвращаемых строк.
WHERE
Предложение будет выглядеть примерно так:
WHERE date_first_viewed >= '2016-01-01'
Других решений пока нет …