我花了很多时间在网上搜索这个问题的答案,但我似乎无法想出任何有用的东西。
我对mySQL很新,所以我的知识有限。
我有一个包含6列的表events
:id
,event_name
,event_date
,event_close_time
,event_link
和{{1 }}
我正在尝试从event_close_time所在的数据库中选择所有内容。当前时间如果事件在今天,并在将来选择所有其他事件。
我想出的是:
event_image
但这并不完全符合我的要求。它返回当前或将来的所有事件,只要它们的结束时间早于当前时间。
我在1个查询中执行此操作非常重要,因为最后的ORDER BY子句允许我将事件按照我要在Web应用程序中使用的顺序进行排序。
有人能指出我需要做出的调整才能获得理想的结果吗?
答案 0 :(得分:1)
您应该使用一个select
和正确的where
子句执行此操作:
SELECT *
FROM `events`
WHERE (event_date = CURDATE() AND event_close_time < CURTIME()) or
(event_date > CURDATE())
ORDER BY `event_date`;
使用or
或union
实施union all
逻辑是一个不好的习惯。首先,它需要扫描events
表两次,每个条件一次。单where
仅扫描一次表。
答案 1 :(得分:0)
这个怎么样?
SELECT *
FROM events
WHERE event_date = CURDATE()
AND event_close_time < CURTIME()
UNION ALL
SELECT *
FROM events
WHERE event_date > CURDATE()
ORDER BY event_date
这也可以使用OR
而不是UNION ALL
来完成,但我发现UNIONS往往更有效率,因为OR会导致索引不被使用(至少在MySQL中)。