簡體   English   中英

針對特定MySQL日期查詢情況的最佳做法

[英]Best practice for a specific MySQL date query situation

我需要基於Zend / MySQL中的幾個日期選項來實現一個相當復雜的查詢,並且很樂意從那些不像我這樣陷入困境的人那里得到一些建議:)

我有一個表“ event_dates”,其日期描述與我的應用程序中的事件模型相關。 每個事件可以具有多個事件日期,而這些事件可以具有相當復雜的設置。

與該問題相關的可配置事物如下:

  • 修復日期
  • 日期范圍(date_from,date_to)
  • 日期范圍基於“特定工作日”
  • 日期范圍基於“每n周”(每2周,每回合留出1個)
  • 日期范圍基於“一個月中的每個第n個工作日”(第二個星期一)
  • 當然,這些的所有組合。

我正在嘗試在對查詢進行編碼之前寫下查詢,因此我對所需內容有清晰的了解-但是有些組合如果不預先編碼可能的日期就無法弄清楚。

您將如何實現這一點-從理論上講,這里沒有要求特定的代碼(但:))。 您是要在PHP中創建可能命中的列表,然后以更簡單的方式查詢它們,還是想對20個wheres和ands等進行復雜的查詢?

謝謝你的時間

  • Arne

PS:這可能會有所幫助->

CREATE TABLE `event_dates` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `events_id` int(11) NOT NULL,
  `datetime_from` datetime DEFAULT NULL,
  `datetime_to` datetime DEFAULT NULL,
  `date_from` date DEFAULT NULL,
  `date_to` date DEFAULT NULL,
  `time_from` time DEFAULT NULL,
  `time_to` time DEFAULT NULL,
  `date_type` tinyint(4) NOT NULL DEFAULT '0',
  `frequency_in_weeks` tinyint(4) DEFAULT NULL,
  `nth_wday_in_month_week` tinyint(4) DEFAULT '0',
  `nth_wday_in_month_wday` tinyint(4) NOT NULL DEFAULT '0',
  `is_mondays` tinyint(1) NOT NULL DEFAULT '0',
  `is_tuesdays` tinyint(1) NOT NULL DEFAULT '0',
  `is_wednesdays` tinyint(1) NOT NULL DEFAULT '0',
  `is_thursdays` tinyint(1) NOT NULL DEFAULT '0',
  `is_fridays` tinyint(1) NOT NULL DEFAULT '0',
  `is_saturdays` tinyint(1) NOT NULL DEFAULT '0',
  `is_sundays` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

我使用日歷應用程序走了這條路,最終決定將事件的每個實例存儲在數據庫中。

對於應用程序的這一部分,有兩個表...一個用於存儲事件信息(標題,描述等),另一個用於每個實例(id,開始日期/時間,結束日期/時間等)。 )。

不利的一面是,事件確實必須在將來的某個時刻結束,無論是從現在開始的一個月,還是從現在開始的50年。 您可以為將來的“無限重復”事件選擇一個任意日期,但這是否取決於您的應用程序。

好處很多。 您可以快速訪問事件的日期/時間,而無需即時進行計算……它已經存在於數據庫中! 它使您的其余代碼非常簡單。

您選擇的路線由您決定,但是我發現通過保持簡單而又快速的方式,每個人都很滿意。

如何使用Google Calendar API? google支持各種重復事件,並且zend框架中已經內置了一個庫。 http://framework.zend.com/manual/en/zend.gdata.calendar.html

我們也嘗試做一個自定義的重復事件,並在出現問題時放棄了。 編輯活動是一場噩夢。 我們將盡快切換到該API。

暫無
暫無

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

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