Se seus
products
tem uma start_date
e um end_date
e sua consulta tem um qstart_date
e um qend_date
, então queremos o número de dias entre:GREATEST(start_date, qstart_date)
e
LEAST(end_date,qend_date)
. No MySQL eu acho que isso se parece com
1 + DATEDIFF ( 'd' , GREATEST(start_date, qstart_date) , LEAST(end_date,qend_date) )
E você vai querer ignorar os números negativos, substituindo-os por "0".