2011-02-14 44 views
2

我有一個包含fixedprice的登記都月度和一個特定的日期,它是這樣的一個MySQL表:每月註冊和註冊帶有日期

id  int(10) 
date  date 
userid int(10) 
montly tinyint(1) 
price decimal(10,2) 

和一些數據可能是

id | date | userid | monthly | price 
1 | 01/01 2011 | 1 | 1 | 200 
2 | 01/02 2011 | 2 | 1 | 300 
3 | 14/01 2011 | 1 | 0 | 400 
4 | 15/02 2011 | 3 | 0 | 100 
5 | 23/02 2011 | 2 | 0 | 600 
6 | 05/03 2011 | 2 | 0 | 700 

每月註冊將始終從月份的第一天開始 ,如果monthly爲1,則爲每月註冊,否則僅發生一次。

和查詢可能(只是一個例子)

SELECT * 
FROM `fixedpriceregistrations` 
WHERE `date` BETWEEN '01/02 2011' AND '02/04 2011' 

,我除了這樣的輸出:

id | date | userid | monthly | price 
1 | 01/01 2011 | 1 | 1 | 200 
2 | 01/02 2011 | 2 | 1 | 300 
4 | 15/02 2011 | 3 | 0 | 100 
5 | 23/02 2011 | 2 | 0 | 600 
1 | 01/01 2011 | 1 | 1 | 200 
2 | 01/02 2011 | 2 | 1 | 300 
6 | 05/03 2011 | 2 | 0 | 700 
1 | 01/01 2011 | 1 | 1 | 200 
2 | 01/02 2011 | 2 | 1 | 300 

我能做到這一點在MySQL或如何做到這一點的最佳途徑PHP?

在PHP中,我考慮了使用日期循環註冊並將它們添加到一個新數組中,並且當月份更改時,每月註冊將被添加。

+0

你的問題不是很清楚。在您發佈的預期輸出中有幾條重複行。而且,它們並非全部都在您在示例查詢中指定的日期之內。你能告訴我們更多關於你的問題和你有什麼問題嗎? – Damp 2011-02-14 18:36:53

+0

必須有重複的月份應該每月呈現 – The87Boy 2011-02-14 19:53:30

回答

2

用php做到這一點。我會:

從表中將您需要的所有記錄(即自開始日期)提取到數組$results

$output = Array(); 
foreach ($results as $row) 
{ 
    $output[] = $row; 
    if ($row['monthly']) 
     while (($row['date'] = add_a_month_to($row['date'])) < $end_date) 
      $output[] = $row; 
} 

然後將所得$output數組進行排序。我將這種排序和add_a_month_to函數留給你。顯然它假設你使用了一種明智的(可排序的)日期格式,例如2011-01-13