2012-08-07 44 views
0

我有一個窗體從日曆中選取日期。該表格將傳遞開始日期和結束日期。我的數據庫表以時間戳格式存儲日期。我必須創建一個查詢來從開始日期和結束日期之間的數據庫表中選擇記錄。我如何查詢?我已經嘗試了下面的代碼,但哪個不起作用。運營商之間的時間戳在MySQL查詢

if(isset($_POST['filter'])) 
    { 
     $sid=$_POST['sid']; 
     $start= date("dMY",strtotime($_POST['start'])); 
     $end= date("dMY",strtotime($_POST['end'])); 

     $res=$db->fetchAll("SELECT * FROM `logfile` WHERE `site_id`=".$sid." AND (date('dMY',`timestamp`) BETWEEN $start AND $end)"); 


    } 

有什麼想法?

謝謝。

+1

另請注意「datetime」和「timestamp」之間的區別。出於很多原因,「時間戳」通常是最不優先的。儘可能使用「datetime」:http://dev.mysql.com/doc/refman/5.1/en/datetime.html恕我直言...... – paulsm4 2012-08-07 04:57:02

回答

1

你迫使PHP和MySQL做大量無用的日期/時間字符串< - >無故原生轉換。

爲什麼就不能有:

$start = strtotime($_POST['start']); 

SELECT ... WHERE `timestamp` BETWEEN FROM_UNIXTIME($start) AND ... 
0

正如@Matei米哈伊說,你不需要轉換$_POST['start']$_POST['end']到時間戳格式,你必須用引號日期列。

此外,您還需要以'2012-08-01'之類的MySQL兼容格式轉換日期。

"SELECT * 
FROM `logfile` 
WHERE `site_id`=".$sid." AND 
     (date('dMY',`timestamp`) BETWEEN '$start' AND '$end')"); 
+0

我不認爲這是強制性的,因爲數字 – 2012-08-07 04:56:04

+0

'$ start'AND '$ end''請用'$ start'和'$ end'代替它)單引號要求在括號內 – Jalpesh 2012-08-07 04:56:39

+0

日期一直需要單引號或雙引號@MateiMihai – Jalpesh 2012-08-07 04:57:43

0

如果$_POST['start']$_POST['end']已經在時間戳格式,只是不改變它們。在其他情況下,只需將時間戳中的字符串轉換爲:

$start = strtotime($_POST['start']); // where $_POST['start'] might be 2012/08/07 
$end = strtotime($_POST['end']); 


$res=$db->fetchAll("SELECT * FROM logfile WHERE site_id=".$sid." AND date BETWEEN $start AND $end");