2012-08-07 105 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");