在我的情况下,我在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>
答案 0 :(得分: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 演示
答案 1 :(得分:1)
您可以将日期分解为数据库中的单独字段。日,月和年。 用爆炸分解日期:
$date = date("Y-m-d");
$explodedDate = explode("-", $date);
$year = $explodedDate[0];
$month = $explodedDate[1];
$day = $explodedDate[2];
然后,您可以将单独的日期属性插入数据库,然后使用mysqli查询根据用户输入显示所需的结果。即:
query = "SELECT * FROM table WHERE month = $userEnteredMonth";