Bạn muốn TIME()
, không phải HOUR()
.
SELECT * FROM cdr_table
WHERE OwnerUserID = '$_SESSION[user_id]'
AND GatewayID = $gateway_id
AND DATE(Dialed) = $date_sql
AND Dialed != 0
AND TIME(StartTime) BETWEEN '$start_time' AND '$end_time'
Ngoài ra, tôi sẽ mạnh mẽ đề xuất thoát tất cả các biến bạn đang nhúng trong mã SQL bằng mysql_real_escape_string()
hoặc tương đương, ngay cả khi bạn chắc chắn rằng không có gì có hại trong đó, chỉ để biến nó thành thói quen.
Lưu ý rằng một truy vấn như thế này về bản chất có thể không hiệu quả, vì nó không thể sử dụng các chỉ mục trên StartTime
cột. Nếu có nhiều hàng có khả năng khớp trong bảng, bạn nên chuẩn hóa lại bảng của mình bằng cách tạo một cột riêng biệt lưu trữ chỉ phần thời gian của StartTime
và thiết lập một chỉ mục trên đó (có thể kết hợp với các cột khác có liên quan).