В базе данных есть 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 Тут полностью попали, но могли только час графика в начале или час в конце. Сама функция отрисовки графика цветами есть и выводит с шагом в час. п.с на начало запроса Все даты представлены в юникс времени и их можно сравнивать. Я перепробовал много вариантов, но всегда попадается участок, когда диаграмма почему-то не попадает в него и выводится с базы когда ненадо или не выводится когда надо. Первое чаще
-=Zhenek=- попробуйте писать меньше воды, ну или задать вначале конкретный вопрос, а дальше размазываться по древу. Плюс по тексту вы постоянно меняете понятия и где у вас какие данные - не понятно. Задача звучит так - в базе лежат три метки времени (Начало-середина-конец, которые можно обозначить интервал1). Откуда-то извне вводится другой интервал (интервал2). Нужно выбрать те строки, для которых происходит наложение этих двух интервалов. Так?
Вообще то так) Объясню : в базе лежат три метки времени (Начало-середина-конец, которые можно обозначить интервал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 ненужных выведет, которые потом не закрашенные полностью будут
-=Zhenek=- `x1`, `x3` - начало и конец интервалов в базе. Y1 - переменная, вместо которой подставляйте нужные значения PHP: SELECT * FROM `table` WHERE (`x1` BETWEEN y1 AND y1+24*60*60) OR (`x3` BETWEEN y1 AND y1+24*60*60) OR (y1 BETWEEN `x1` AND `x3`)