运算符之间的mysql查询中的时间戳

时间:2012-08-07 04:51:58

标签: php mysql date between

我有一张表格可以从日历中获取日期。该表单将通过开始日期和结束日期。我的数据库表以时间戳格式存储日期。我必须创建一个查询,以便在开始日期和结束日期之间从数据库表中选择记录。我怎样才能进行查询?我已经尝试了下面的代码,但是没有用。

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


    }

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:1)

您迫使PHP和MySQL无缘无故地执行大量无用的日期/时间字符串< - >原生转换。

为什么不简单地拥有:

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

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

答案 1 :(得分:0)

正如@Matei Mihai所说,您不需要将$_POST['start']$_POST['end']转换为时间戳格式,您必须将日期列括在引号中。

此外,您需要转换MySQL兼容格式的日期,如'2012-08-01'

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

答案 2 :(得分: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");