你好!
1.events 2.eventdates
+------------------+ +---------------------------------------+
| id | title | | id | event_id | date | bookable |
+------------------+ +---------------------------------------+
| 1 | event1 | | 1 | 1 | 2010-03-25 | 1 |
| 2 | event2 | | 2 | 1 | 2012-02-20 | 1 |
| 3 | event3 | | 3 | 2 | 2014-12-15 | 1 |
+------------------+ | 4 | 2 | 2014-10-28 | 1 | <
| 5 | 2 | 2014-10-24 | 0 |
| 6 | 3 | 2014-11-30 | 1 | <
| 7 | 3 | 2014-06-17 | 1 |
| 8 | 1 | 2014-12-25 | 0 |
+---------------------------------------+
目标是通过下一个可用的显示每个事件(ORDER BY):
如果今天是2014-10-17,它应该是这样的:
'event2', '2014-10-28'
'event3', '2014-11-30'
'event1', '' (or NULL)
-
我真的需要在同一个查询中,因为我想对事件使用分页。 这就是我在使用php查询后无法对数据进行排序的原因...
由于WHERE bookable
从查询中排除了事件1,因此我无法使用简单的左连接。
我也尝试使用子查询,但我无法获得每个事件的下一个日期。
-
有人有想法或查询我可以测试以获得所需的结果吗?
感谢所有帮助。
谢谢!
答案 0 :(得分:1)
SELECT e.title, d.date
FROM events e
LEFT JOIN (
SELECT event_id, MIN(date) AS date
FROM eventdates
WHERE date >= DATE(NOW()) AND bookable = 1
GROUP BY event_id
) d ON d.event_id = e.id
ORDER BY d.date
或者没有子查询:
SELECT e.title, MIN(d.date) AS date
FROM events e
LEFT JOIN eventdates d
ON d.event_id = e.id
AND d.date >= DATE(NOW())
AND d.bookable = 1
GROUP BY e.id, e.title
ORDER BY date