TIMESTAMPDIFF возник вопрос

dDan

Новичок
TIMESTAMPDIFF возник вопрос

Как сделать TIMESTAMPDIFF так чтобы он не учитывал дни из определенного списка.
Напимер
разнциа составляет 3 дня
но 2ой день выходной, как сделать чтобы он не учитывал этот самый день (дни)
 

Gas

может по одной?
Этот "определённый список" - набор конкретных дат или правил и где он хранится, в базе или на стороне application?
 

dDan

Новичок
Этот список тоже в базе, это набор определенных дат и выходных днех.... Т.е праздники и выходные дни в учет не идут.
 

Gas

может по одной?
[sql]
CREATE TABLE `dt_list` (
`dt` date NOT NULL,
KEY `dt` (`dt`)
) ENGINE=MyISAM;

CREATE TABLE `dt` (
`dt1` date NOT NULL,
`dt2` date NOT NULL
) ENGINE=MyISAM;

insert into dt_list values('2007-11-10'),('2007-06-20'),('2007-05-12');
insert into dt values('2007-04-01', '2007-08-01');
[/sql]

получить разницу в днях между датами из таблицы dt, исключив дни из таблицы dt_list
[sql]
select TIMESTAMPDIFF(day, dt1, dt2)-(select count(*) from dt_list where dt between dt1 and dt2) as diff from dt limit 1;
[/sql]
 

dDan

Новичок
Классно решение я както не додумался даже.

-~{}~ 08.12.07 20:46:

Хм как бы еще выходные дни сразу оттуда вычесть...но так чтобы их не было в списке воскресенье и субботу.
 

Gas

может по одной?
[SQL]
select (TIMESTAMPDIFF(day, dt1, dt2)-(select count(*) from dt_list where dt between dt1 and dt2)-((WEEK(dt2,1)-WEEK(dt1,1))*2)+IF(DAYOFWEEK(dt1)=7,1,0)+IF(DAYOFWEEK(dt1)=1,2,0)-IF(DAYOFWEEK(dt2)=7,1,0)-IF(DAYOFWEEK(dt2)=1,2,0)) as diff from dt limit 1;
[/SQL]

честно говоря не проверял всю математику :)
делается предположение что dt2 больше dt1
 

dDan

Новичок
Вычитает на 1 больше чем надо т.е разницу между одной и той же датой, скажем сегодня в субботу, выходной, прошло часов 14 между двумя датами но показывать diff = -1
 

Gas

может по одной?
dDan
поправить запрос для этого случая - домашнее задание ;)
 

dDan

Новичок
Да но тут еще одна звагвоздка праздники храняться как день.месяц
DD-MM но не DD-MM-YYYY
 

Gas

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