我有一个多年的字段的MySQL数据库表。该表的示例可以是:
registration_date |
------------------
1965
1972
1984
1997
1963
在事物的前端,用户可以从年份“范围”的下拉列表中进行选择。即。
1961-1965
1966-1970
1971-1975
根据我的数据库中可用的数据生成此日期范围的最有效方法是什么?
我试过了:
$row = //year available
while(((int) substr($row, -1)) !== 0) {
$start_date = $row--;
}
while(((int) substr($row, -1)) !== 6) {
$end_date = $row++;
}
但不幸的是,这只是因为执行时间太长而挂起。
答案 0 :(得分:0)
您需要使用min()
,max()
函数从数据库registration_date中查找最小值和最大值。
我在这里使用的是php函数,您应该使用查询来查找MIN
和MAX
。
我将为您提供与数组相同的示例。
<?php
$resArr = Array(1965,1972,1984,1997,1963);
$max = max($resArr);
$min = min($resArr);
$diff = (($max - $min)/5) + 1;
while($max % 5 != 0)
{
$max++;
}
while($min % 5 != 0)
{
$min--;
}
for($i=0;$i<$diff;$i++)
{
$start = $min+1;
$end = $min+5;
$range = $start."-".$end;
$rangeArr[] = $range;
$min = $min+5;
}
foreach($rangeArr as $row)
{
$flag = 0;
$tmpArr = explode("-", $row);
foreach($resArr as $val)
{
if($val>=$tmpArr[0] && $val<=$tmpArr[1])
{
$flag = 1;
}
}
if($flag)
{
$newArr[] = $row;
}
}
echo "Final Array";
print_r($newArr);
<强>输出强>
Array
(
[0] => 1961-1965
[1] => 1971-1975
[2] => 1981-1985
[3] => 1996-2000
)
在线演示:Click Here