В настоящее время я храню даты в виде временных меток Unix в столбце INT (10) в версии mysql 4.0.8 db (движок MyISAM).
Я запрашиваю эти даты, чтобы извлечь записи между диапазоном дат, используя следующий SQL:
$sql = "SELECT `users`.`real_name`, `users`.`user_value`, `clients`.`client_name`, `clients`.`client_stars`, `timing`.`start_date`, `timing`.`end_date`, `projects`.`project_name`
from timing
LEFT JOIN users on (users.id = timing.user_id)
LEFT JOIN clients on (clients.id = timing.client_id)
LEFT JOIN projects on (projects.project_id = timing.project_id)
WHERE start_date BETWEEN :start_date AND :end_date";
Я использую PDO, поэтому параметры.
Я на 100% уверен, что переменные :start_date и :end_date верны во всех случаях, поскольку я их проверял. Также start_date не является двусмысленным, и нет никаких предупреждений/уведомлений относительно этого запроса.
Моя проблема в том, что я не получаю ожидаемые строки. Если я запрашиваю строки между полуночью 2013/11/14 и полуночью 2013/11/15, ожидание ТОЛЬКО результатов от 14-го числа. Впрочем, ряды с 15-го тоже пройдены — но не все.
Я также только что проверил между 1384473600 и 1384473600, то есть между сегодняшней полночью и сегодняшней полночью (как в той же метке времени).
Возвращаемые строки должны быть равны 0, однако он вернул все строки с сегодняшнего дня (например, первая возвращенная строка имеет значение start_date 1384524193)!
Я что-то пропустил в том, как работает оператор between в mySQL? Как он может возвращать строки, когда min и max совпадают?
Я тестировал и тестировал, и почти каждый раз, когда я делаю запрос, возвращаются строки, которые ВЫШЕ указанного между потолком.
Что происходит не так?
WHERE start_date >= :start_date AND start_data <= :end_date
? - person Latheesan   schedule 15.11.2013