如果是mySql查询中的语句

时间:2013-07-07 03:00:16

标签: mysql sql database

我花了很多时间在网上搜索这个问题的答案,但我似乎无法想出任何有用的东西。

我对mySQL很新,所以我的知识有限。

我有一个包含6列的表eventsidevent_nameevent_dateevent_close_timeevent_link和{{1 }}

我正在尝试从event_close_time所在的数据库中选择所有内容。当前时间如果事件在今天,并在将来选择所有其他事件。

我想出的是:

event_image

但这并不完全符合我的要求。它返回当前或将来的所有事件,只要它们的结束时间早于当前时间。

我在1个查询中执行此操作非常重要,因为最后的ORDER BY子句允许我将事件按照我要在Web应用程序中使用的顺序进行排序。

有人能指出我需要做出的调整才能获得理想的结果吗?

2 个答案:

答案 0 :(得分:1)

您应该使用一个select和正确的where子句执行此操作:

SELECT *
FROM `events` 
WHERE (event_date = CURDATE() AND event_close_time < CURTIME()) or
      (event_date > CURDATE())
ORDER BY `event_date`;

使用orunion实施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中)。