2016-12-23 12 views
5

Tôi có mã này bên dưới.CHỌN sử dụng GIỮA trong MYSQL và Biến PHP

<?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; 

} 

?> 

Tôi cố gắng thực thi tệp php, trang hiển thị cho tôi không có gì, truy vấn mysql có vẻ không chính xác. Nhưng khi tôi cố gắng chạy truy vấn này trong phpmyadmin SELECT start_break, finish_break FROM break_time WHERE start_break AND finish_break BETWEEN '08:00:00' AND '17:00:00' truy vấn đã cho tôi kết quả như mong đợi.

Bất cứ ai cũng có thể giúp tôi với điều này? Tôi đã cố gắng làm một số nghiên cứu, nhưng theo như tôi nhận được rằng tôi chỉ cần thêm strtotime vào biến của tôi, tôi đã làm điều đó và không có gì xảy ra.

Mọi trợ giúp sẽ được đánh giá cao.

+0

Hãy thử điều này: $ query = mysqli_query ($ con, "SELECT' start_break', 'finish_break' FROM' break_time' WHERE 'start_break' AND' finish_break' GIỮA $ start_time_input AND $ finish_time_input "); –

+0

Vui lòng thêm phần này vào đầu tệp của bạn để xem lỗi: error_reporting (-1); ini_set ('display_errors', 'On'); set_error_handler ("var_dump"); Sau đó, bạn có thể thấy lỗi của mình và gỡ lỗi. –

Trả lời

5

Đây là truy vấn hiện tại của bạn:

SELECT start_break, 
     finish_break 
FROM break_time 
WHERE start_break AND finish_break BETWEEN '08:00:00' AND '17:00:00' 

Mệnh WHERE đang nói nơi start_break để đánh giá đúng, và finish_break là 08:00-05:00. Điều này có lẽ không phải là những gì bạn muốn, bởi vì start_break sẽ luôn luôn đánh giá đúng. Từ MySQL documentation:

MySQL evaluates any nonzero, non-NULL value to TRUE

Bên cạnh những vấn đề logic trong mệnh đề WHERE, bạn cũng đã cố gắng để so sánh khi bắt đầu và kết thúc cột trực tiếp chống lại một chuỗi thời gian mà thôi. Điều này sẽ không hoạt động trừ khi các cột này cũng là thời gian, điều mà tôi nghi ngờ.

Dưới đây là các truy vấn mà bạn có lẽ hợp lý nhằm mục đích:

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 

này giả định rằng các cột start_breakend_breakdatetime và bạn chỉ muốn so sánh thời gian trong ngày.

+1

Đã xảy ra lỗi trước đó, 'strtotime' chuyển đổi chuỗi thành số nguyên ... – jeroen

+0

@jeroen' Tôi không phải là chuyên gia PHP, vì vậy tôi không thể tư vấn cho bạn ở đó ' –

+0

Tôi có nghĩa là nó bổ sung cho câu trả lời của bạn , không phải là phê bình :-) – jeroen

Các vấn đề liên quan