Работаем с датами в MySQL

Вычитание даты от текущей

Следующий код позволяет вычислить разницу в днях между текущей датой, и датой в поле date_start таблицы tbl_sites

SELECT TO_DAYS(CURDATE())-TO_DAYS(date_start) FROM tbl_sites

Добавление текущей даты/времени при вставке записи

Для сохранения в таблице времени и даты добавления новой записи, необходимо создать новое поле таблицы в Time, где время будет храниться в Unix формате, либо поле TIMESTAMP, в котором время будет храниться в виде: “2013-09-17 15:00:00”.

Для первого случая (поле Time) для сохранения времени добавления записи используется функция time(). Код в данном случае будет выглядеть таким образом:

mysql_query(“INSERT INTO `my_table` (`pole1`,`pole2`,`pole3`,`time`) VALUES (‘string1′,’string2′,’string3’,'”.time().”‘)”);

Для второго случая (поле TIMESTAMP) используется параметр CURRENT_TIMESTAMP (текущее время). Соответственно код будет таким:

mysql_query(“INSERT INTO `my_table` (`pole1`,`pole2`,`pole3`,`time`) VALUES (‘string1′,’string2′,’string3’,CURRENT_TIMESTAMP)”);

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

/*получаем данные из БД, а именно – время сообщения с ID равным 1, в формате TIMESTAMP */
$sql=mysql_query(“SELECT `time` FROM `my_table` WHERE `id` = ‘1’ LIMIT 1”);
$array=mysql_fetch_array($sql);
$my_time=$array[‘time’];
/*преобразуем время в удобный формат Unix time */
$my_time = strtotime($my_time);
echo $my_time();
$time_offset = time()-$my_time();

Группировка записей по дням, месяцам

Если необходимо, например, посчитать количество звонков по дням, или месяцам (в случаях когда одна запись – звонок), можно сделать следующим образом:

Считаем количество звонков по дням в период последние 30 дней:

SELECT DATE_FORMAT(date_time,”%d.%m.%Y”), count(*) FROM tbl_calls GROUP BY DATE_FORMAT(date_time,”%d.%m.%Y”) ORDER BY `date_time` DESC LIMIT 0,30

Считаем количество звонков по месяцам:

SELECT DATE_FORMAT(date_time,”%m.%Y”), count(*) FROM tbl_calls GROUP BY DATE_FORMAT(date_time,”%m.%Y”) ORDER BY `date_time`
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (6 оценок, среднее: 4,83 из 5)
Загрузка...
Добавить комментарий

3 × 5 =

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: