0

在我的情况下,我在 mySQL 中有一个日期字段,我曾经通过下面的代码获取变量的值。当我查询诸如“08-28-1989”之类的完整日期时,这是正确的。

mysql:

SELECT COUNT(*)
FROM content 
where dateReceived='{$approved_date}' 
and description='{$description}'

PHP:

   $approved_year   = $_POST["approved_year"];
   $approved_month  = $_POST["approved_month"];
   $approved_day    = $_POST["approved_day"];
   $approved_dt = strtotime($approved_year."-".$approved_month."-".$approved_day);
                    $approved_date  = date("Y-m-d",$approved_dt);



如果我说用户只输入“08”(仅限月份),我怎样才能使它更加动态,然后它会显示该月的所有记录,而不管日期和年份。或者用户只需输入月份和年份,然后将其查询到我的数据库。

这也是我的 HTML:

<p>
            Date Approved
            <select name="approved_month">
            <?php
                $month = array(" ","January","February","March","April",
                               "May","June","July","August",
                                "Septembe","October","November","December");
                for($x=0;$x<12;$x++){
                    echo "<option value=\"".$x."\">".$month[$x]."</option>";
                }
            ?>
            </select>
            <input type="text" name="approved_day" value="" size="2" />
            <input type="text" name="approved_year" value="" size="10" />
</p>
4

2 回答 2

1

在 mysql 端执行此操作的一种方法是使用MONTH()YEAR()函数。

SELECT * 
  FROM Table1
 WHERE MONTH(date) = 5;

SELECT * 
  FROM Table1
 WHERE MONTH(date) = 5
   AND YEAR(date) = 2013;

注意:这种方法(在date列上使用函数)的缺点是不会在date列上使用索引。

第二个查询可以使用重写BETWEEN

SELECT * 
  FROM Table1
 WHERE date BETWEEN '2013-05-01' AND '2013-05-31';

此类查询的月份的第一个日期和最后一个日期可以很容易地在 php 中以相对日期格式构建

这是SQLFiddle演示

于 2013-07-17T05:49:21.967 回答
1

您可以获取日期并将其分解为数据库中的单独字段。日、月、年。用爆炸分解日期:

$date = date("Y-m-d");
$explodedDate = explode("-", $date);
$year = $explodedDate[0];
$month = $explodedDate[1];
$day = $explodedDate[2];

然后,您可以将单独的日期属性插入数据库,然后使用 mysqli 查询根据用户输入显示您需要的结果。IE:

query = "SELECT * FROM table WHERE month = $userEnteredMonth";
于 2013-07-17T05:59:47.937 回答