根据数据库中的范围填充一个完整日期的选择列表

时间:2013-11-03 17:30:20

标签: php mysql sql date

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

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

$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
  }
?>

我如何获取最低日期,最高日期,并在其中填充所有内容的选择框?

由于

1 个答案:

答案 0 :(得分:1)

  

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

如果这是问题的核心,那么解决问题的最简单方法就是更改您的查询以使用DISTINCT关键字,并结合ORDER BY关键字来定位,例如这样:

SELECT DISTINCT order_date FROM orders ORDER BY order_date

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

编辑:虽然如果你想要使用最高和最低,你可以使用内置的MINMAX函数来获得最高和最低,然后按如下方式生成它们: / p>

<?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
    }
?>