次のようなmysqlテーブルがあります。
| ID | date_start | date_end |
| 1 | 2013-10-17 | 2013-10-18 |
| 2 | 2013-10-28 | 2013-10-31 |
2 つの日付の間の空白期間を確認する必要があります。
日付範囲からレコードを取得するには、次のようにします。
SELECT * FROM `periods` WHERE ((date_start <= '2013-10-18' AND date_end >= '2013-10-18' AND date_end <= '2013-10-31') OR (date_start >= '2013-10-18' AND date_start <= '2013-10-31' AND date_end >= '2013-10-31') OR (date_start >= '2013-10-18' AND date_end <= '2013-10-31') OR (date_start <= '2013-10-18' AND date_end >= '2013-10-31'))
PHP では while ループで確認できますが、これを確認できる mysql クエリはありますか?
$first = true;
$emptyPeriod = false;
while ($period = mysql_fetch_assoc($result)) {
if($first) {
$first = false;
$prevEndPeriod = $period['date_end'];
continue;
}
$nextDay = date('Y-m-d', strtotime($prevEndPeriod . ' + 1 day'));
if($nextDay != $period['date_start']) {
$emptyPeriod = true;
break;
} else {
$prevEndPeriod = $period['date_end'];
}
}
echo ($emptyPeriod) ? 'Empty period' : 'OK';