繁体   English   中英

MySql查询中的if语句

[英]If statement within mySql query

我已经花了很多时间在网上寻找这个问题的答案,但似乎无法提出任何有用的建议。

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

我有一个包含6列的表eventsidevent_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应用程序中使用的顺序。

谁能指出我需要进行调整才能获得所需的结果?

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

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

通过使用unionunion all来实施or逻辑是一个坏习惯。 一方面,它需要扫描events表两次,每种情况一次。 where仅扫描一次表。

这个怎么样?

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中如此)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM