2个日期之间的PHP SQL查询

时间:2014-01-07 13:34:23

标签: php mysql sql

我是PHP的新手,目前正在编写一个系统,工作人员可以记录班次,帐户部门可以打印要支付的金额等等。

我需要显示给帐户部门成员的表格,以便可以查询日期范围。我的代码似乎有效,但它只能检索单个日期,而不是日期范围。

以下是代码:

$shiftdata = mysqli_query($connection, "SELECT * FROM tablename_shift INNER JOIN 
tablename_staff ON tablename_shift.uniqueid = tablename_staff.uniqueid WHERE
shift_date BETWEEN '".$_POST['to_date']."' AND '".$_POST['from_date']."'
ORDER by shiftid ASC")

由于代码适用于单日期范围,我最初的想法是错误可能在于我如何存储日期。我最初将它们以DD / MM / YY的格式存储为VARCHAR(30),然后以YYYY / MM / DD格式将其更改为DATE,以便与MySQL存储日期的方式兼容。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

之间的Mysql期望第一个日期更小,即从 - 到,所以试试这个

$shiftdata = mysqli_query($connection, "SELECT * FROM tablename_shift INNER JOIN 
tablename_staff ON tablename_shift.uniqueid = tablename_staff.uniqueid WHERE
shift_date BETWEEN '".$_POST['from_date']."' AND '".$_POST['to_date']."'
ORDER by shiftid ASC")

答案 1 :(得分:0)

大概是工作人员选择一个人类可读的日期,即07-01-2014,那么你需要使用这个日期但是以mysql日期格式来测验数据库。

您需要在执行查询之前更改日期,如此。

$startDate = date("Y-m-d", strtotime($_POST['from_date']));
$endDate = date("Y-m-d", strtotime($_POST['to_date']));

$shiftdata = mysqli_query($connection, "SELECT * FROM tablename_shift INNER JOIN
tablename_staff ON tablename_shift.uniqueid = tablename_staff.uniqueid WHERE 
shift_date BETWEEN '".$startDate."' AND '".$endDate."'
ORDER by shiftid ASC")

您的日期需要在查询中排在第一位!

还要注意可怕的mysql注射!

答案 2 :(得分:0)

you can try this as well.

$shiftdata = mysqli_query($connection, "SELECT * FROM tablename_shift INNER JOIN 
tablename_staff ON tablename_shift.uniqueid = tablename_staff.uniqueid WHERE
shift_date >= '".$_POST['to_date']."' AND  shift_date <='".$_POST['from_date']."'
ORDER by shiftid ASC")