[英]If statement within mySql query
我已經花了很多時間在網上尋找這個問題的答案,但似乎無法提出任何有用的建議。
我對MySQL很陌生,所以我的知識有限。
我有一個包含6列的表events
: id
, event_name
, event_date
, event_close_time
, event_link
和event_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`;
通過使用union
或union 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.