簡體   English   中英

選擇一個大於當前日期的日期

[英]SELECT a date that is greater than current date

我有一個MySQL數據庫表,其中一個單元格包含多個日期,並且我想選擇所有包含一個或多個日期大於今天日期的單元格的行嗎? (使用PHP)

當然:

select * from MyTable where MyDate > Now()

您的單個字段如何包含多個日期? 也許您應該為此考慮一個單獨的表。

如果該字段是DATEDATETIME ,則可以使用

SELECT * FROM table WHERE datefield > NOW()

“一個單元格包含多個日期” ..是問題的症結所在。 這是三個選項。

規范化/修復模式

從充分規范化的模式開始-特別是,任何列/“單元格”最多可以有一個日期(或一條信息)。 根據信息的作用,這可能需要也可能不需要引入另一個表。

這種方法是可擴展的,並且可以在RDMBS / RA設計中使用,並且,如果完成,則所提出的其他查詢將“有效”。

(到目前為止,這是總體上最好的選擇,應盡可能進行。正確的規范化還應指導進一步的模式開發,以減輕將來的此類問題。)

創建標准化視圖

創建可以JOIN的非規范化表的規范化視圖(或這種標准化的查詢)。 然后使用各種建議的答案之一(在規范化模式下工作)..盡管無法使用索引是一個極端的缺點。

這非常麻煩,但是可以做到。 看到SELECT取消規范化的列到單獨的記錄中? 舉個例子 (請注意此處的綜合行關系,盡管某些[non MySQL]數據庫也支持表值函數和此類的跨應用程序。)

該方法無法擴展,因為它無法使用索引。

過濾客戶端(PHP)

獲取每一行。 根據需要循環並使用explode等。

由於缺少索引, 並且需要在本地獲取所有數據,因此該方法無法擴展。


雖然可以使用各種技巧(例如FIND_IN_SET )在非規范化的列中找到相等的值,但是使用相同的技術無法找到相對的(即更大/更小)值。 在兩種情況下均有效的解決方案是修復基礎架構。

如果僅在DATE而不是DATETIME ,則可以使用CURDATE()代替NOW()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM