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

Тема в разделе "Базы данных", создана пользователем kir9-molodoi, 26 мар 2015.

Статус темы:
Закрыта.
Модераторы: latteo
  1. kir9-molodoi

    kir9-molodoi

    Регистр.:
    31 май 2014
    Сообщения:
    250
    Симпатии:
    78
    Есть таблица в бд, в которой дата храниться в unixtime, как можно выбрать записи за прошлый месяц, за позапрошлый месяц так чтоб весь месяц полный попадал, не зависимо от того сколько в нем дней ?
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.403
    Симпатии:
    1.183
    kir9-molodoi и cthulchu нравится это.
  3. kir9-molodoi

    kir9-molodoi

    Регистр.:
    31 май 2014
    Сообщения:
    250
    Симпатии:
    78
    ну приблизительно так я и догадывался, но в этом случае надо точно знать начало месяца и конец месяца, а есть такой инструмент чтоб указывать не явно как .... ?
     
  4. cthulchu

    cthulchu Создатель

    Заблокирован
    Регистр.:
    18 мар 2015
    Сообщения:
    20
    Симпатии:
    24
    используй month(NOW()) и от этого отталкивайся для путешествия в прошлое.
     
    kir9-molodoi нравится это.
  5. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.403
    Симпатии:
    1.183
    Не совсем так :) Это сработает в частном случае.
    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 для нужного месяца и потом в запросе использовал обычные операторы сравнения.
     
    Последнее редактирование: 27 мар 2015
    cthulchu и kir9-molodoi нравится это.
Статус темы:
Закрыта.