выбор данных помесячно по дате с unixtime

Статус
В этой теме нельзя размещать новые ответы.

kir9-molodoi

Гуру форума
Регистрация
31 Май 2014
Сообщения
249
Реакции
82
Есть таблица в бд, в которой дата храниться в unixtime, как можно выбрать записи за прошлый месяц, за позапрошлый месяц так чтоб весь месяц полный попадал, не зависимо от того сколько в нем дней ?
 
FROM_UNIXTIME для преобразования в дату, month для получения номера месяца Для просмотра ссылки Войди или Зарегистрируйся
PHP:
SELECT month(FROM_UNIXTIME(1423566153)) , FROM_UNIXTIME(1423566153)
 
ну приблизительно так я и догадывался, но в этом случае надо точно знать начало месяца и конец месяца, а есть такой инструмент чтоб указывать не явно как .... ?
 
  • Заблокирован
  • #4
используй month(NOW()) и от этого отталкивайся для путешествия в прошлое.
 
используй month(NOW()) и от этого отталкивайся для путешествия в прошлое.
Не совсем так :) Это сработает в частном случае.
month возвращает число, если сейчас январь и надо отнять 2 месяца получим 1-2 = -1 и придётся наш запрос нагружать дополнительными IF на предмет отрицательных чисел

ну приблизительно так я и догадывался, но в этом случае надо точно знать начало месяца и конец месяца, а есть такой инструмент чтоб указывать не явно как .... ?
Сонный был, ответил не на ваш вопрос, а по ключевым словам :)
Надо привести всё к определённым единицам и с ними работать:
типа такого
PHP:
WHERE DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -2 MONTH), '%Y-%m') = DATE_FORMAT(FROM_UNIXTIME(1421000000), '%Y-%m')

select для лучшего понимания:
PHP:
SELECT DATE_ADD(NOW(), INTERVAL -2 MONTH), DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -2 MONTH), '%Y-%m'),
FROM_UNIXTIME(1421000000), DATE_FORMAT(FROM_UNIXTIME(1421000000), '%Y-%m'), DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -2 MONTH), '%Y-%m') = DATE_FORMAT(FROM_UNIXTIME(1421000000), '%Y-%m')
;
только такие преобразования должны нехило базу нагружать при большой таблице.
Я бы лучше на php или предварительным select`ом рассчитал диапазон UNIXTIME для нужного месяца и потом в запросе использовал обычные операторы сравнения.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху