Я использую базу данных для хранения журналов со столбцом «дата», который содержит дату, в которую он был вставлен. Формат даты – «MM / DD / YY». Пожалуйста, кто-нибудь может предложить, как бы я выбрал данные между двумя определенными датами. Например, я попробовал это:
$from_date = "01/01/12"; $to_date = "02/11/12"; $result = mysql_query("SELECT * FROM logs WHERE date >= " . $from_date . " AND date <= " . $to_date . " ORDER by id DESC"); while($row = mysql_fetch_array($result)) { // display results here }
Но я думаю, это не работает, потому что даты не являются цифрами. Спасибо за помощь! 🙂
Используйте ключевое слово BETWEEN
:
"SELECT * FROM logs WHERE date BETWEEN '" . $from_date . "' AND '" . $to_date . "' ORDER by id DESC"
Вы можете указать поля в качестве дат, а затем выбрать from_date и to_date
SELECT * FROM logs WHERE date STR_TO_DATE(date, '%m/%d/%Y') between STR_TO_DATE(from_date, '%m/%d/%Y') and STR_TO_DATE(to_date, '%m/%d/%Y')
Ответ на ваш вопрос зависит от типа данных, который используется для хранения поля date
в таблице logs
.
SQL (MySQL в вашем случае) полностью способен сравнивать даты. Обычно используется оператор BETWEEN .. AND ..
но это не будет работать корректно, если тип date
CHAR (или VARCHAR) – в этом случае вам нужно будет указать поле date
в DATETIME перед сравнением.
Вам нужно добавить одинарные кавычки к значениям даты '01 / 01/12 ':
$from_date = "01/01/12"; $to_date = "02/11/12"; $result = mysql_query("SELECT * FROM logs WHERE date >= '" . $from_date . "' AND date <= '" . $to_date . "' ORDER by id DESC");