Суббота , 27 Июль 2024
ДомойПубликацииmysql: установка времени с возрастанием

mysql: установка времени с возрастанием

mysql

Иногда, спарсив откуда-нибудь данные, встаёт задача их размещения в таблице. Как правило, никаких проблем с этим не возникает, ибо связи редко носят явно трёхсторонние отношения. даже если взять категории и тэги в вордпрессе: посты связаны однозначно и с теми, и с другими. И каждый пост может принадлежать не только произвольному количеству категорий, но и иметь любые теги. Это хорошо, это правильно. и проблем, казалось бы, нет, если бы не одно но: вешать парсер на крон может выдаться довольно накладно, не говоря уже о явном палеве: если кто-то найдёт свои статьи на чужих сайтах, ради интереса может засечь, через какое время они «теряют уникальность» и утекают. После этого можно смотреть в логах, кто же там безобразничает и свободно добавлять ip в блек-лист (а заодно и все найденные free-прокси, чтобы не было соблазнов).

Так вот, добавить в таблицу статьи не проблема. Но хотелось бы придать этому делу более живой вид. Допустим, показать пользователю, который попадёт на сайт, что статьи добавляются ежедневно, по несколько раз. т. е. Всё дело сводится к так называемой отсроченной публикации.

Один из вариантов — использовать php. но если данные уже в базе, то смысла в скрипте, в принципе, и нет. У самого mysql есть замечательные средства для очень комфортной работы с датой/временем. Допустим, нужно «опубликовать» записи с начала января этого года, и при этом каждая новая запись будет добавляться через 4 часа (у меня в таблице присутствует только дата, но ведь ничего не мешать использовать тут же и время). Достаточно в своём любимом phpmyadmin выполнить такой запрос:

SET @a := '2011-01-01';
UPDATE `table`
SET `date` = (@a := ADDDATE(@a, INTERVAL 4 HOUR));

Всё очень просто. а главный фокус кроется в функции ADDDATE.

Функция имеет вид:

ADDDATE(date, INTERVAL expr unit)

Где:
date — дата в формате, понятном для mysql, например: 2011-12-13 или 2012-01-02 03:04:05;
expr — число, положительно и отрицательное, например 5 или -12 (для увеличения или уменьшения интервала времени соответственно);
unit — тип временного интервала. доступные следующие основные значения:

  • SECOND — секунда
  • MINUTE — минута
  • HOUR — час
  • DAY — день
  • WEEK — неделя
  • MONTH — месяц
  • YEAR — год
  • и ещё некоторые, подробнее в мане

1

Теперь можно попытаться расшифровать, чем же занимается приведённый запрос. Первая строка устанавливает начальную дату; точку отсчёта. Следующая строка содержит инструкцию UPDATE, которая пробегает по каждой записи, модифицируется значение переменной @a и заменяет поле с датой на текущее @a.

В результате на выходе получим таблицу с модифицированной датой, такой, что на каждый день придётся по 6 записей. Просто, удобно, и не нужно городить php-скриптов.

Рейтинг: 0

Автор публикации

2 070
не в сети 1 год

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (Оценок пока нет)
Загрузка...

Оставить комментарий

Политика конфиденциальности

Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

Принять