2013-07-17 219 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";