我有一张表格可以从日历中获取日期。该表单将通过开始日期和结束日期。我的数据库表以时间戳格式存储日期。我必须创建一个查询,以便在开始日期和结束日期之间从数据库表中选择记录。我怎样才能进行查询?我已经尝试了下面的代码,但是没有用。
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)");
}
有什么想法吗?
感谢。
答案 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");