我有一个 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++;
}
但不幸的是,这只是挂起,因为执行时间太长。
最佳答案
您需要使用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
关于php - 根据提供的日期创建日期范围选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571956/