2014-04-30 51 views
0

考慮到我有表(events)這amoung其他包含列datereoccurfrequencyreoccuring事件日曆純MySQL的

其中reoccur可能是enum'd''w'y數天,數週或數年

+---------------------+-----------+-------------+ 
| eventdate   | reoccur | frequency | 
+---------------------+-----------+-------------+ 
| 2014-03-31 00:00:00 | w   |   4 | 
| 2014-07-01 00:00:00 | d   |   7 | 
+---------------------+-----------+-------------+ 

我該如何去選擇一個選定的年份內的每個重現事件的行?

我相信我需要一個mysql while循環來實現這一目標?我一直在學習了一段時間的可能性,我還是堅持了從哪裏開始

+0

所以,你暗示要與一個存儲過程做到這一點? – Strawberry

+0

TBH我仍然伴隨此沒有進一步的,我帶你使用任何應用程序級的代碼 – andrew

+0

有什麼建議? – Strawberry

回答

1

我想這可以與MySQL做,但我想我會贊成一個應用程序級的方法,像下面的東西。請注意,我不是專家,當涉及到PHP和,簡潔明瞭的方式(也可能在一些靈活性爲代價的),我已經設計稍作修改......

的DDL:

CREATE TABLE events 
(event_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,event_date DATE NOT NULL 
,recurrence_pattern ENUM('day','week','month','year') NULL 
,no_of_occurrences INT NULL 
); 

INSERT INTO events VALUES 
(1,'2014-03-31 00:00:00','week',4), 
(2,'2014-07-01 00:00:00','day',7); 

PHP:

<?php 
include('path/to/connection/stateme.nts'); 

$query = " 
    SELECT event_id 
     , event_date 
     , recurrence_pattern 
     , no_of_occurrences 
    FROM events 
    ORDER 
     BY event_date; 
"; 

$result = mysqli_query($db,$query); 

while($row = mysqli_fetch_assoc($result)){ 
for($i=0;$i<$row['no_of_occurrences'];$i++){ 
echo date('Y-m-d',strtotime("{$row['event_date']} + $i {$row['recurrence_pattern']}")), "\n"; 
} 
} 
?> 

輸出:

2014-03-31 
2014-04-07 
2014-04-14 
2014-04-21 

2014-07-01 
2014-07-02 
2014-07-03 
2014-07-04 
2014-07-05 
2014-07-06 
2014-07-07 
+0

非常相似,我最後做設定。我意識到它是單獨的更難以實現在MySQL比我想象的 – andrew

+0

我懷疑有一個MySQL的解決方案,利用預先準備的語句和存儲過程 - 但是這似乎只是簡單。 – Strawberry