簡體   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