我有一个MySQL数据库表,有一个字段多年。这个表的例子可以是:
registration_date |
------------------
1965
1972
1984
1997
1963
在前端,用户可以从年份'范围'的下拉菜单中选择。例如
1961-1965
1966-1970
1971-1975
根据数据库中可用的数据生成这个日期范围的最有效方法是什么?
I have try:
$row = //year available
while(((int) substr($row, -1)) !== 0) {
$start_date = $row--;
}
while(((int) substr($row, -1)) !== 6) {
$end_date = $row++;
}
但不幸的是,这只是挂起,因为执行时间太长
您需要使用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
)
在线演示:点击这里