按特定间隔日期选择数据库值,无法正常工作
Selecting database values by specific interval dates, not working properly
HTML形式:
<form method="POST" action="configuration/raportare/generate_orhideea.php">
<input type="text" name="reportrangeTwo" class="pull-right" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; width: 100%"/><br>
<input type="submit" value="Generează raport">
</form>
表单有一个 Jquery 数据范围输入,允许我同时 select 两个日期。
generate_orhideea.php 文件,其中我用 explode()
函数减去每个日期:
//SOME CODE HERE
// Create database variables
require_once "../../configuration/db.php";
$dates = $_POST['reportrangeTwo']; // E.g: 19-01-2017 | 17-02-2017
$first_date = explode(" ", $dates);
$begin = $first_date[0];
$end = $first_date[2];
$rows = mysqli_query($connection, "SELECT * FROM clienti_orhideea WHERE data_inregistrare between '$begin' and '$end' order by data_inregistrare asc");
// loop over the rows, outputting them
while ($row = mysqli_fetch_assoc($rows)) fputcsv($output, $row);
?>
如果 $dates = 17-02-2017 | 17-02-2017
它将 return 我今天的所有值。
如果 $dates = 16-02-2017 | 16-02-2017
它将 return 我昨天的所有值。
如果 $dates = 19-01-2017 | 17-02-2017
它应该 return 持续 30 天,但它 return 是空白的,因为我没有任何以 19 开头的日期。
但是,如果 $dates = 11-02-2017 | 17-02-2017
,它将 return 我过去 7 天的所有值,包括 14-01-2017 的值。已经超过7天了。
可能是什么问题?
尝试将要比较的日期转换为适合MySQL的格式:
$rows = mysqli_query($connection,
"SELECT * FROM clienti_orhideea
WHERE data_inregistrare between
STR_TO_DATE('$begin', '%d-%m-%Y') AND
STR_TO_DATE('$end', '%d-%m-%Y')
ORDER BY data_inregistrare ASC"
);
如果您偶然将日期存储为 varchar 数据类型(您应该始终使用 date
、datetime
或 [=19] 中的任何其他 date/time 兼容数据类型=]), 你可以试试这个:
$rows = mysqli_query($connection,
"SELECT * FROM clienti_orhideea
WHERE STR_TO_DATE(data_inregistrare, '%d-%m-%Y') between
STR_TO_DATE('$begin', '%d-%m-%Y') AND
STR_TO_DATE('$end', '%d-%m-%Y')
ORDER BY STR_TO_DATE(data_inregistrare, '%d-%m-%Y') ASC"
);
HTML形式:
<form method="POST" action="configuration/raportare/generate_orhideea.php">
<input type="text" name="reportrangeTwo" class="pull-right" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; width: 100%"/><br>
<input type="submit" value="Generează raport">
</form>
表单有一个 Jquery 数据范围输入,允许我同时 select 两个日期。
generate_orhideea.php 文件,其中我用 explode()
函数减去每个日期:
//SOME CODE HERE
// Create database variables
require_once "../../configuration/db.php";
$dates = $_POST['reportrangeTwo']; // E.g: 19-01-2017 | 17-02-2017
$first_date = explode(" ", $dates);
$begin = $first_date[0];
$end = $first_date[2];
$rows = mysqli_query($connection, "SELECT * FROM clienti_orhideea WHERE data_inregistrare between '$begin' and '$end' order by data_inregistrare asc");
// loop over the rows, outputting them
while ($row = mysqli_fetch_assoc($rows)) fputcsv($output, $row);
?>
如果 $dates = 17-02-2017 | 17-02-2017
它将 return 我今天的所有值。
如果 $dates = 16-02-2017 | 16-02-2017
它将 return 我昨天的所有值。
如果 $dates = 19-01-2017 | 17-02-2017
它应该 return 持续 30 天,但它 return 是空白的,因为我没有任何以 19 开头的日期。
但是,如果 $dates = 11-02-2017 | 17-02-2017
,它将 return 我过去 7 天的所有值,包括 14-01-2017 的值。已经超过7天了。
可能是什么问题?
尝试将要比较的日期转换为适合MySQL的格式:
$rows = mysqli_query($connection,
"SELECT * FROM clienti_orhideea
WHERE data_inregistrare between
STR_TO_DATE('$begin', '%d-%m-%Y') AND
STR_TO_DATE('$end', '%d-%m-%Y')
ORDER BY data_inregistrare ASC"
);
如果您偶然将日期存储为 varchar 数据类型(您应该始终使用 date
、datetime
或 [=19] 中的任何其他 date/time 兼容数据类型=]), 你可以试试这个:
$rows = mysqli_query($connection,
"SELECT * FROM clienti_orhideea
WHERE STR_TO_DATE(data_inregistrare, '%d-%m-%Y') between
STR_TO_DATE('$begin', '%d-%m-%Y') AND
STR_TO_DATE('$end', '%d-%m-%Y')
ORDER BY STR_TO_DATE(data_inregistrare, '%d-%m-%Y') ASC"
);