我在数据库中有2个表,具有以下属性:
Booking
=======
booking_id
booking_start
booking_end
resource_booked
===============
booking_id
resource_id
Run Code Online (Sandbox Code Playgroud)
第二个表是"预订"和"资源"之间的关联实体(即,1个预订可以包含许多资源).属性booking_start和booking_end是包含日期和时间的时间戳.
如果日期/时间与其他类似resource_id的预订重叠或冲突,我可以知道如何找到每个resource_id(resource_booked)吗?
我正在纸上涂抹答案,以图形方式,看看它是否可以帮助我想象我如何解决这个问题,我得到了这个:
我做了第1步,但第2步让我感到困惑!
我真的很感激任何帮助!谢谢!
编辑:我正在阅读Renshaw先生的答案,并尝试自己做一个,看看我是否理解,我得到了这个概念:
SELECT
a.*
FROM
(SELECT
b.creation_date,
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b
INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as a,
(SELECT
b.booking_id,
r_b.resource_id,
b.booking_start,
b.booking_end
FROM Booking b INNER JOIN resource_booked r_b ON b.booking_id = r_b.booking_id) as
WHERE
a.resource_id = b.resource_id
AND
a.booking_id <> b.booking_id
AND
a.booking_start BETWEEN b.booking_start AND b.booking_end
AND
a.creation_date >= b.creation_date
Run Code Online (Sandbox Code Playgroud)
我想我正在尝试创建两个相同的表并使用resource_id连接它们,查找具有相似资源ID但不同booking_id的记录,并查看一个(booking_id)的booking_start日期时间是否在另一个(booking_id)的booking_start和booking_end之间.
它真的很乱,我甚至不确定我的询问是否在考虑我的想法但是有些奇迹,我得到了和Renshaw先生一样的答案!
我在我的数据库中有4列,它们是:
Date_in | Time_in | Date_out | Time_out
Run Code Online (Sandbox Code Playgroud)
Date_in和Time_in属于一起(例如,2013-02-18 13:00:00),date_out属于Time_out.我想找出和之间的区别,直到:
$start_time = new DateTime("'$list[date_in] "."$list[time_in]'");
$since_start = $start_time->diff(new DateTime("'$list[date_out] "."$list[time_out]'"));
$hours = $since_start->h.' hours';
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我认为我的引号和双引号都搞砸了,因为使用"'.真的让我很困惑..
提前感谢有关如何修复代码的任何建议!
[编辑]感谢大家的所有详细帮助!我刚刚意识到服务器不支持php 5.3,我不能使用datetime().
所以我的解决方案是:
$start_time = strtotime("$list[date_in] " . "$list[time_in]");
$end_time = strtotime("$list[date_out] " . "$list[time_out]");
$hours = abs(($end_time - $start_time)/3600);
Run Code Online (Sandbox Code Playgroud)