2016-12-08 72 views
1

我需要选择startdue列范围落入另一个范围的所有行。所有时间都以unix时间戳格式给出。在另一个时间戳范围内查找带有时间戳范围的所有行

以下查询的工作原理除外start < :weekstartdue>:weekend

$week_start = (new DateTimeImmutable())->setTimestamp($_REQUEST['startdatets']); 
$week_start_ts = $week_start->getTimestamp(); 
$week_end = $week_start->modify('+6 days')->setTime(23,59,59); 
$week_end_ts = $week_end->getTimestamp(); 

$query = " SELECT * 

     FROM  schedules 

     WHERE  ((start BETWEEN :weekstart AND :weekend) OR (due BETWEEN :weekstart AND :weekend)) 

     ORDER BY start 
"; 
try { $stmt = $dbh->prepare($query); $stmt->execute(array(':weekstart' => $week_start_ts, ':weekend' => $week_end_ts)); } catch(PDOException $ex) { echo 'Query failed: ' . $ex->getMessage(); exit; } 

enter image description here

我既需要如果可能的话 请帮助工作。

+0

编辑您的问题并提供样本数据和期望的结果。 –

+0

[确定是否两个日期范围重叠]可能的重复(http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap) –

+0

我投票结束这个问题,因为你不清楚你在问什么。 –

回答

1

呵呵,所以你们错过了start < :weekstartend > :weekend之间的情况 - 两者之间都没有,但是一周与范围重叠。有一个很好的逻辑。

搜索期间WHERE start < :weekend AND end > :weekstart

+0

你确定?仔细看看比较的是什么。 – shudder

+1

这将工作,只是尝试。查看重复链接以获取详细说明。 –

相关问题