2011-02-14 65 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