我需要mysql语句的帮助。 我有2个表,一个包含事件详细信息,另一个包含事件日期。
我需要显示今天或之后结束的所有活动日期。
我有一个具有以下日期的活动: 29/03/2016 30/03/2016 31/03/2016
我尝试了这个查询:
SELECT a.event_id, event_name, event_location, event_desc,
MIN(a.event_date) AS from_date, MAX(a.event_date) AS to_date
FROM event_time a
LEFT JOIN event_time b
ON b.event_id = a.event_id
JOIN events c
ON a.event_id = c.event_id
WHERE b.event_date <= NOW()
GROUP BY a.event_id
但是在from_date字段中,我只获得了31/03/2016。
任何人都可以帮助我根据需要建立正确的陈述吗?
谢谢
答案 0 :(得分:2)
嗯,你问的是缺少一些信息,所以如果我理解正确,你不需要加入两次到event_times:
SELECT a.event_id, event_name, event_location, event_desc,
MIN(a.event_date) AS from_date, MAX(a.event_date) AS to_date
FROM event_time a
JOIN events c
ON a.event_id = c.event_id
WHERE a.event_date >= NOW()
GROUP BY a.event_id
我已将where子句更改为
a.event_date >= NOW()
因为你说你的日期要大于或等于今天的日期,但是现在我正在查看你的主题,我看到你写了相反的内容,所以如果你不小,请转过来。
此外,一般来说,你是LEFT JOINING
到event_time b,你在where子句中有:
WHERE b.event_date <= NOW()
这会自动将连接转换为内连接,right
表上的过滤器应仅在ON
子句中。在你的情况下:
LEFT JOIN event_time b
ON b.event_id = a.event_id AND
b.event_date <= NOW()