我目前正在做一个小项目。我有2个表 AREA 和 ACTIVITY
表区域
+---------------+
| a_id a_name |
+---------------+
| 1 area1 |
| 2 area2 |
| 3 area3 |
| 4 area4 |
+---------------+
表格活动
+-----------------------------------------------------+
| id areaid starttime endtime |
+-----------------------------------------------------+
| 1 1 2018-09-21 15:00:00 2018-09-21 17:00:00 |
| 2 2 2018-09-23 15:00:00 2018-09-21 18:00:00 |
| 3 1 2018-09-21 17:00:00 2018-09-21 19:00:00 |
| 4 4 2018-07-21 12:00:00 2018-07-21 13:30:00 |
+-----------------------------------------------------+
现在,我想选择所有区域并加入当前处于活动状态或将在下一次启动的活动:
starttime >= NOW() AND endtime >= NOW()
starttime <= NOW() AND endtime >=NOW()
还应显示没有活动或即将进行的活动的区域。
我希望得到以下结果:
+-------------------------------------------------------+
| a_id id startime endtime |
+-------------------------------------------------------+
| 1 1 2018-09-21 15:00:00 2018-09-21 17:00:00 |
| 2 2 2018-09-23 15:00:00 2018-09-21 18:00:00 |
| 3 null null null |
| 4 null null null |
+-------------------------------------------------------+
我已经尝试了几次查询,但是还没有找到解决方案。
当前,这是我的最佳尝试:
SELECT *
FROM areas ar
LEFT JOIN activity a
ON ar.a_id = a.areaid
WHERE a.starttime >= NOW() AND a.endtime >= NOW() OR a.starttime <= NOW() AND a.endtime >= NOW()
ORDER BY a.starttime DESC;
通过此查询,我可以找到正在进行或即将进行的活动的所有结果。但是如何将WHERE表达式限制为每个外键仅获得一行?
提前谢谢!