2013-07-17 173 views
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> 
+1

向我们显示您正在用于按日期获取结果的数据库查询。 –

回答

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与relative date formats

这里是SQLFiddle演示

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";