在MYSQL和PHP变量中使用BETWEEN进行SELECT

M A*_*ori 5 php mysql

我在下面有这个代码.

<?php

require_once 'con.php';

$start_time_input = strtotime('08:00:00');
$finish_time_input = strtotime('17:00:00');

$total_time = 0;

$query = mysqli_query($con, "SELECT `start_break`, `finish_break` FROM `break_time` WHERE `start_break` AND `finish_break` BETWEEN '".$start_time_input."' AND '".$finish_time_input."' " );

while($tampil = mysqli_fetch_array($query)){

    $start_time_db = strtotime($tampil['start_break']);
    $finish_time_db = strtotime($tampil['finish_break']);

    if ($start_time_input <= $start_time_db AND $finish_time_input >= $finish_time_db) {

        $total_time = (($finish_time_input - $start_time_input) - ($finish_time_db - $start_time_db)) / 3600;

    } else {
        $total_time = ($finish_time_input - $start_time_input) / 3600;
    }

    echo $total_time;

}

?>
Run Code Online (Sandbox Code Playgroud)

我尝试执行php文件,页面显示我什么都没有,mysql查询似乎不正确.但是当我尝试在phpmyadmin中运行此查询时SELECT start_break, finish_break FROM break_time WHERE start_break AND finish_break BETWEEN '08:00:00' AND '17:00:00',查询会按预期给出结果.

有人可以帮我这个吗?我已经尝试做了一些研究,但据我所知,我只需要将strtotime添加到我的变量中,我已经这样做了,没有任何反应.

任何帮助都感激不尽.

Tim*_*sen 5

这是您当前的查询:

SELECT start_break,
       finish_break
FROM break_time
WHERE start_break AND finish_break BETWEEN '08:00:00' AND '17:00:00'
Run Code Online (Sandbox Code Playgroud)

WHERE条款说的是start_break评估为真,并且finish_break是在上午8点到下午5点之间.这可能不是你想要的,因为start_break总是会评估为真.从MySQL 文档:

MySQL将任何非零非NULL值评估为TRUE

除了WHERE子句中的逻辑问题之外,您还尝试直接将开始列和结束列与仅限时间的字符串进行比较.除非这些列也是时间,否则这将无效,我怀疑.

这是您可能在逻辑上打算的查询:

SELECT start_break,
       finish_break
FROM break_time
WHERE DATE_FORMAT(start_break, '%H:%i:%s') BETWEEN '08:00:00' AND '17:00:00' AND   -- both the start break and
      DATE_FORMAT(finish_break, '%H:%i:%s') BETWEEN '08:00:00' AND '17:00:00'      -- finish break are within range
Run Code Online (Sandbox Code Playgroud)

这假定start_breakend_break列是datetime,您只想比较一天中的时间.