2016-12-08 75 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

這將工作,只是嘗試。查看重複鏈接以獲取詳細說明。 –

相關問題