根据数据库中的范围填充充满日期的选择列表


populate a select list full of dates based on a range from database

>我在数据库中有一堆日期,我希望用户能够从下拉列表中选择特定日期。

我尝试只列出所有日期,但这不起作用,因为它显示重复的日期。

$query1 = "SELECT order_date FROM orders";
$result1 = mysql_query($query1);
while($row1 = mysql_fetch_array($result1))
  {
    $dateDB = date("Y-m-d", strtotime($row1['order_date']));
    $niceDate = date("d/m/Y", strtotime($row1['order_date']));
?>
    <option value="<?php echo $dateDB; ?>"><?php echo $niceDate; ?></option>
<?php
  }
?>

我怎样才能抓取最低日期、最高日期,然后用介于两者之间的所有内容填充选择框?

谢谢

我尝试只列出所有日期,但这不起作用,因为它显示重复的日期。

如果这是问题的核心,那么最简单的解决方法是更改查询以使用 DISTINCT 关键字,并结合ORDER BY关键字对其进行排序,如下所示:

SELECT DISTINCT order_date FROM orders ORDER BY order_date

这意味着您只会获得唯一的日期,第一个日期将是最低的,最后一个日期将是最高的,您可以轻松地将其添加到 while 循环中。

编辑:虽然如果你想用最高和最低来做,你可以使用内置的MINMAX函数来获取最高和最低,然后生成它们如下:

<?php
    $query = 'SELECT MAX(order_date) AS `highest`, ' . 
                    'MIN(order_date) AS `lowest` FROM orders';
    $result = mysql_query($query);
    $lowest = strtotime(mysql_result($result , 0, 'lowest'));
    $highest = strtotime(mysql_result($result , 0, 'highest'));
    $dates = array();
    $dateTime = $lowest;
    do
    {
        $newDates = array();
        $newDates['db'] = date("d/m/Y", $dateTime);
        $newDates['nice'] = date("d/m/Y", $dateTime++);
        $dates[] = $newDates;
    }
    while($dateTime <= $highest);
    foreach($dates as $date)
    {
?>
    <option value="<?php echo $date['db']; ?>"><?php echo $date['nice']; ?></option>
<?php
    }
?>