0

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

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

我有一个events有 6 列的表:idevent_nameevent_dateevent_close_timeevent_linkevent_image

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

我想出的是:

SELECT * FROM `events` 
WHERE `event_date` >= 'todays_date'
AND `event_close_time` >  'current_time'
ORDER BY `event_date`

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

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

谁能指出我需要做的调整才能得到想要的结果?

4

2 回答 2

1

您应该使用一个select正确的where子句来做到这一点:

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

or使用unionor来实现逻辑union all是一个不好的习惯。一方面,它需要扫描events表两次,每个条件一次。单where只扫描表一次。

于 2013-07-07T12:24:50.767 回答
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

这也可以用 anOR而不是来完成UNION ALL,但我发现 UNIONS 往往更有效,因为 OR 会导致不使用索引(至少在 MySQL 中)。

于 2013-07-07T03:03:37.727 回答