[英]Best practice for a specific MySQL date query situation
我需要基於Zend / MySQL中的幾個日期選項來實現一個相當復雜的查詢,並且很樂意從那些不像我這樣陷入困境的人那里得到一些建議:)
我有一個表“ event_dates”,其日期描述與我的應用程序中的事件模型相關。 每個事件可以具有多個事件日期,而這些事件可以具有相當復雜的設置。
與該問題相關的可配置事物如下:
我正在嘗試在對查詢進行編碼之前寫下查詢,因此我對所需內容有清晰的了解-但是有些組合如果不預先編碼可能的日期就無法弄清楚。
您將如何實現這一點-從理論上講,這里沒有要求特定的代碼(但:))。 您是要在PHP中創建可能命中的列表,然后以更簡單的方式查詢它們,還是想對20個wheres和ands等進行復雜的查詢?
謝謝你的時間
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.