[英]MySQL Query - Find dates within range by month and year
我有一個日歷,顯示給定月份和年份的事件。 每個事件在DATETIME
字段中都有一個開始時間和結束時間。
$org = $_SESSION['org_id'];
$month = 5;
$year = 2013;
以下僅檢索在指定月/年內開始或結束的事件:
SELECT * FROM events WHERE org='$org' AND
((MONTH(time_start)='$month' AND YEAR(time_start)='$year') OR
(MONTH(time_end)='$month' AND YEAR(time_end)='$year'))
它不會返回在指定月/年之外開始和結束的事件。
恩。 time_start='2013-04-07 12:00:00' time_end='2013-06-07 12:00:00'
- 我的2013年5月查詢中未找到該事件。
如何選擇開始,結束或交叉給定月/年的事件?
SELECT * FROM events
WHERE org='$org'
AND time_start < '$year-$month-01 00:00:00' + INTERVAL 1 MONTH
AND time_end > '$year-$month-01 00:00:00'
;
如果你對mysql很好,你甚至可以將字符串轉換為日期,其他數據庫就像那些東西,但是mysql對字符串感到滿意。
嘗試將此添加到您的AND
-
((MONTH(time_start)<'$month' AND YEAR(time_start)<='$year') AND
(MONTH(time_end)>'$month' AND YEAR(time_end)>='$year'))
所以你的查詢現在變得(有點笨重,但它應該讓你朝着正確的方向) -
SELECT * FROM events WHERE org='$org' AND
(((MONTH(time_start)='$month' AND YEAR(time_start)='$year') OR
(MONTH(time_end)='$month' AND YEAR(time_end)='$year'))
OR
((MONTH(time_start)<'$month' AND YEAR(time_start)<='$year') AND
(MONTH(time_end)>'$month' AND YEAR(time_end)>='$year')))
$start = date('Y-m-d', mktime((0,0,0,$month,1,$year)));
$end = date('Y-m-d', mktime((23,59,59,$month+1,0,$year)))
你需要檢查四個條件:
SELECT *
FROM events
WHERE org='$org'
AND ( (start_time BETWEEN '$start' AND '$end')
OR (end_time BETWEEN '$start' AND '$end')
OR ('$start' BETWEEN start_time AND end_time)
OR ('$end' BETWEEN start_time AND end_time)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.