按特定间隔日期选择数据库值,无法正常工作

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 数据类型(您应该始终使用 datedatetime 或 [=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"
                    );