根据日期范围和日期范围检查行数
Checking row count based on date range against date range
想请教一下,在mysql有没有办法做到这一点。我知道它可以循环完成,但感觉必须有更好的方法。
我有 table 假期
id | date_from | date_to
1 2017-02-16 2017-02-19
2 2017-02-18 2017-02-21
3 2017-02-12 2017-02-19
4 2017-02-19 2017-02-21
问题是,用户选择了他想要预订的日期范围,比如 2017-02-14 到 2017-02-24 我必须检查他是否仍然可以请求它,因为只有 4 个人可以请求同时休假。
所以我需要查询来检查用户选择的范围(例如 2017-02-14 到 2017-02-24)是否是任何一天的第 4 行或更多行。
提前感谢您的回答。
您可以在任何 天 执行此操作:
select count(*)
from vacation v
where '2017-02-14' between date_from and date_to;
您可以通过指定每一天将其扩展到一个范围:
select dte, count(v.id)
from (select date('2017-02-14') as dte union all
select date('2017-02-15') as dte union all
select date('2017-02-16') as dte union all
select date('2017-02-17') as dte union all
select date('2017-02-18') as dte union all
. . .
) d left join
vacation v
on d.dte between date_from and date_to
group by d.dte
having count(*) > 4;
在应用程序端循环可能更简单。或者,使用日历 table 如果你有的话。
Select 该日期范围内的所有行并计算结果:
SELECT count(*) FROM vacation WHERE :input_from BETWEEN date_from AND date_to OR :input_to BETWEEN date_from AND date_to
想请教一下,在mysql有没有办法做到这一点。我知道它可以循环完成,但感觉必须有更好的方法。
我有 table 假期
id | date_from | date_to
1 2017-02-16 2017-02-19
2 2017-02-18 2017-02-21
3 2017-02-12 2017-02-19
4 2017-02-19 2017-02-21
问题是,用户选择了他想要预订的日期范围,比如 2017-02-14 到 2017-02-24 我必须检查他是否仍然可以请求它,因为只有 4 个人可以请求同时休假。
所以我需要查询来检查用户选择的范围(例如 2017-02-14 到 2017-02-24)是否是任何一天的第 4 行或更多行。
提前感谢您的回答。
您可以在任何 天 执行此操作:
select count(*)
from vacation v
where '2017-02-14' between date_from and date_to;
您可以通过指定每一天将其扩展到一个范围:
select dte, count(v.id)
from (select date('2017-02-14') as dte union all
select date('2017-02-15') as dte union all
select date('2017-02-16') as dte union all
select date('2017-02-17') as dte union all
select date('2017-02-18') as dte union all
. . .
) d left join
vacation v
on d.dte between date_from and date_to
group by d.dte
having count(*) > 4;
在应用程序端循环可能更简单。或者,使用日历 table 如果你有的话。
Select 该日期范围内的所有行并计算结果:
SELECT count(*) FROM vacation WHERE :input_from BETWEEN date_from AND date_to OR :input_to BETWEEN date_from AND date_to