小编Cup*_*ppy的帖子

MySQL - 查找时间重叠

我在数据库中有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个表(Booking,Booked_resource)连接到一个表中,需要4个属性.
  2. 按照此处建议的答案:在一个表中查找重叠(日期/时间)行

我做了第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先生一样的答案!

mysql sql database

6
推荐指数
1
解决办法
1802
查看次数

php:datetime()2个日期时间与2个变量之间的差异

我在我的数据库中有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)

php datetime date

2
推荐指数
1
解决办法
3万
查看次数

标签 统计

database ×1

date ×1

datetime ×1

mysql ×1

php ×1

sql ×1