0

我有一个表格可以从日历中获取日期。该表格将传递开始日期和结束日期。我的数据库表以时间戳格式存储日期。我必须创建一个查询以从开始日期和结束日期之间的数据库表中选择记录。我该如何查询?我已经尝试了下面的代码,但它不起作用。

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


    }

有什么想法吗?

谢谢。

4

3 回答 3

1

您无缘无故地强迫 PHP 和 MySQL 进行大量无用的日期/时间字符串<->本机转换。

为什么不简单地拥有:

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

SELECT ... WHERE `timestamp` BETWEEN FROM_UNIXTIME($start) AND ...
于 2012-08-07T04:54:14.950 回答
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')");
于 2012-08-07T04:54:23.400 回答
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"); 
于 2012-08-07T04:55:09.123 回答