Вывести число просмотров за сегодня?

289
12 мая 2018, 19:10

Подскажите как вывести число просмотров объявления за сегодня ?

У меня сейчас выводится общее число просмотров переменной вот этой строкой

введите сюда кодecho '<img class="glaz" src="/icon/glaz.png"width="16" height="13" title="Количество просмотров">&nbsp;&nbsp;&nbsp;'.$row_Recordset1['counter'];

нужно к ней добавить число просмотров за сегодня что бы вышло так (просмотров 80 сегодня 5) и что бы все это обновлялось в 00.00 часов как это реализовать .

Answer 1

Для начала надо определить понятие "сегодня" - с учетом временных зон это понятие явно не определено.

Варианта 2:

  1. Без привязки к временным зонам просто считаем, что сегодня := время с полуночи текущей даты до текущего времени в зоне Z, где Z можно принять зону сайта, например Z := UTC+3
  2. В более сложном варианте считаем, что зона определяется для каждого посетителя локально, кто-то зашел из UTC+3, кто-то из UTC+4, а где-то из UTC+2. У всех понятие "сегодня" будет разное

В случае сложного варианта 2 нужно будет помнить каждый просмотр, или чуток схалявить - помнить число просмотров за последние 24 часа. Там все решение упрется в аккуратный SQL и работу с временными зонами

Я рассмотрю простой вариант, первый.

Понадобиться 2 счетчика. Просмотров всего (total) и просмотров сегодня (today). Пока идет текущая дата, мы просто прибавляем каждый просмотр объявления в счетчик today, и всегда прибавляем total. А в момент перещелкивания даты мы обнулим today.

Событие сброса можно организовать как минимум двумя способами:

  1. [Через date в записи] Запоминать в объявлении дату сегодня, и если при +1 просмотре объявления дата не равна сохраненной, делать сброс и сдвигать дату
  2. [Через cron] Делать каждый день эту операцию по cron на сервере

Более простой для кода и переносимости вариант первый.

/* Функция вызывается каждый раз, когда мы добавляем просмотр объявления 
Необходимые поля в $record:
total - INT - счетчик просмотров за все время
today - INT - счетчик просмотров сегодня
date - DATE - дата последнего просмотра, то есть сегодня
*/
function AddView($record)
{
    if (date('Y-m-d') != $record['date']) {
        $record['today'] = 0;
    }
    $record['total'] += 1;
    $record['today'] += 1;
    // Каким-то образом записываем обновленную запись в базу
    // Можете заменить на прямой SQL или как у вас принято писать в базу
    return UpdateRecord($record);
}
/* Функция возвращает просмотры */
function GetView($record)
{
    return 'Просмотры: всего '.$record['total'].' / сегодня '.$record['today'];
}

Ну и добавить просмотры лучше до того, как отображать их количество

Answer 2

Если предположить, что:

  1. Количество просмотров хранится в базе данных с разбивкой по объявлениям (например, как поле в таблице объявлений)
  2. Статистика отдельных просмотров не хранится
  3. Не заморачиваемся на зоны времени, работая по зоне и времени сервера

то:

  1. Добавляем в таблицу (объявлений) поле просмотров за сегодня

    ALTER TABLE adverts ADD COLUMN daily_views INT UNSIGNED DEFAULT 0;
  2. Добавляем в код скрипта инкремент этого поля при очередном просмотре (так же, как инкрементируется поле общего количества просмотров counter)

  3. Создаём в планировщике сервера задание, которое обнуляет поле суточных просмотров в 0:00 ежесуточно

    CREATE EVENT 
        ON SHEDULE EVERY 1 DAY 
        STARTS CURRENT_DATE + INTERVAL 1 DAY
        DO 
        UPDATE adverts SET daily_views = DEFAULT;
  4. Запускаем планировщик

    SET GLOBAL event_scheduler = ON;

Альтернативный вариант - добавить поле просмотров за предыдущие дни ALTER TABLE adverts ADD COLUMN prev_views INT UNSIGNED;, и по эвенту копировать в него текущее состояние счётчика UPDATE adverts SET prev_views = counter;, тогда сегодняшние просмотры находим вульгарным вычитанием...

READ ALSO
Проблемы с удаленным подключением к mysql

Проблемы с удаленным подключением к mysql

пытаюсь подключиться к БД используя JDBC:

207
Помогите сделать запрос MySql

Помогите сделать запрос MySql

Есть две таблицы

219
Как использовать Booking Sync Api

Как использовать Booking Sync Api

Подскажите как авторизоваться при помощи Booking Sync Api? В документации есть способ авторизации только через приложение http://developersbookingsync

260
WooCommerce изменить данные пользователя

WooCommerce изменить данные пользователя

Прошу подсказать, как изменить личные данные пользователя для WooCommerceПробую:

209