Диаграмма ганта (попадание отрезков времени)

Discussion in 'PHP' started by -=Zhenek=-, 2 May 2012.

  1. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    В базе данных есть 3 поля с датами. это значит 3 отрезка. до х1 , от х1 до х2 , от х2 до х2+х дней

    И отрезок участка самой диаграммы обычно это 24 часа т.е у1 и у1+ 23:59:59 где у1 например 10.03.12

    Работаю со временем в формате юникса т.е секундах.

    Сама сложность вывести из базы данных именно поля попадающие в условия данного графика.

    например
    10.03.12 00:00|-------------------------------------------------------|10.03.12 23:59:59

    а в базе данные 05.03.12 10:00 , 10.03.12 12:00 , 10.03.12 11:00

    т.е наш отрезок времени попадает в диапазон. Центральную дату брать нет смысла, а только крайние части диапазона.

    как задать условие вывода? Тут фактически пару сравнений, но нужно чтоб даже если 1 час попадает, то выводить. или пол диапазаона например

    например
    10.03.12 00:00|-------------------------------------------------------|10.03.12 23:59:59

    а в базе данные 10.03.12 23:00 , 12.03.12 12:00 , 15.03.12 11:00 т.е первая дата на час но попадает в наш график.

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

    например
    10.03.12 00:00|-------------------------------------------------------|17.03.12 23:59:59

    а в базе данные 11.03.12 10:00 , 12.03.12 12:00 , 13.03.12 11:00
    Тут полностью попали, но могли только час графика в начале или час в конце.

    Сама функция отрисовки графика цветами есть и выводит с шагом в час.

    п.с на начало запроса Все даты представлены в юникс времени и их можно сравнивать.

    Я перепробовал много вариантов, но всегда попадается участок, когда диаграмма почему-то не попадает в него и выводится с базы когда ненадо или не выводится когда надо. Первое чаще
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    -=Zhenek=- попробуйте писать меньше воды, ну или задать вначале конкретный вопрос, а дальше размазываться по древу. Плюс по тексту вы постоянно меняете понятия и где у вас какие данные - не понятно.

    Задача звучит так - в базе лежат три метки времени (Начало-середина-конец, которые можно обозначить интервал1). Откуда-то извне вводится другой интервал (интервал2). Нужно выбрать те строки, для которых происходит наложение этих двух интервалов. Так?
     
    _________________________
  3. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Вообще то так)
    Объясню :
    в базе лежат три метки времени (Начало-середина-конец, которые можно обозначить интервал1)
    Что такое интервал? Это начало и конец, неважно сколько еще меток будет в середине. |----|------|---------|

    А второй интервал - это уже интервал самой диаграммы.

    Вы представляете себе диаграмму Ганта?

    Я даже 3 пример привел. Сейчас приведу еще

    например в базе хранится 10.03.12 10:00 11.03.12 11:00 15.03.12 15:00
    Мы открыли просмотр диаграммы на 11.03.12
    т.е мы просматриваем с 11.03.12 00:00 до 11.03.12 23:59

    И если интервал (10.03.12 10:00 15.03.12 15:00) попадает в (с 11.03.12 00:00 до 11.03.12 23:59) то выбираем из базы.

    Вот скрин раскадровки диаграммы по часам для текущего дня
    http://clip2net.com/s/1S82L который уже сделан. Только вот правильно выбрать из базы не могу( то одну запись выкинет, то 10 ненужных выведет, которые потом не закрашенные полностью будут
     
    #3 -=Zhenek=-, 2 May 2012
    Last edited: 2 May 2012
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    -=Zhenek=- `x1`, `x3` - начало и конец интервалов в базе. Y1 - переменная, вместо которой подставляйте нужные значения
    PHP:
    SELECT FROM `tableWHERE (`x1BETWEEN y1 AND y1+24*60*60) OR (`x3BETWEEN y1 AND y1+24*60*60) OR (y1 BETWEEN `x1` AND `x3`)
     
    _________________________
    1 person likes this.
  5. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Спасибо. То, что нужно.

    Почему я раньше не замечал BETWEEN (((