Я создал небольшое приложение, в котором есть User Management, интерфейсная консоль для ввода данных и внутренняя консоль для управления частями интерфейса. Интерфейс добавляет в базу данных MySQL строки с метками времени. Бэкэнд должен иметь возможность выбирать строки из базы данных между датами X и Y.
Пока все работает, кроме части даты, с которой я действительно борюсь.
Входные данные внешнего интерфейса SQL выглядят следующим образом (упрощено с удалением ложного кода):
$date = time();
$top_level_category = $_POST['top_level_category'];
$sub_level_category = $_POST['sub_level_category'];
$company = $_POST['company'];
$agent_name = $_POST['agent_name'];
$ticket_id = $_POST['ticket_id'];
$sql = "INSERT INTO dacc_data ("
. "id, top_level_category, sub_level_category, "
. "agent_name, date, ticket_id, company"
. ") VALUES ("
. "NULL, '$top_level_category', '$sub_level_category', "
. "'$agent_name', FROM_UNIXTIME('$date'), '$ticket_id', '$company'"
. ")"
;
$result = mysql_query($sql) or die (mysql_error());
Кажется, это работает нормально, метка времени подбирается и добавляется в столбец DATETIME в моей таблице. Он отображается в базе данных как дд / мм / гггг чч: мм: сс.
Итак ... мой первый вопрос - это правильный способ сделать это?
Второй вопрос: какой оператор SQL мне понадобится для извлечения массива строк между датами X и Y.
Приносим извинения, если это немного бессвязно, надеюсь, что это понятно, но если вам нужна дополнительная информация, дайте мне знать.
вы можете захотеть добавить mysql_real_escape_string к своим сообщениям, чтобы остановить инъекцию






Дата и время MySQL должны быть отформатированы тире:
ГГГГ-ММ-ДД ЧЧ: ММ: СС
http://dev.mysql.com/doc/refman/5.0/en/datetime.html
Затем вы можете запросить диапазоны дат двумя способами:
select *
from table
where date >= '[start date]' and date <= '[end date]';
или же
select *
from table
where date between '[start date]' and '[end date]';
где «table» - это имя вашей таблицы базы данных, а «date» - это имя вашего поля datetime.
DATE_SUB / DATE_ADD могут помочь в этом - так же, как strtotime в php ('+ 4 дня') или использование mktime, он позволяет забыть о том, сколько дней в месяце.
Ты прав. Я могу подтвердить, что в базе данных есть «ГГГГ-ММ-ДД ЧЧ: ММ: СС» - я использую редактор SQLWave для быстрого просмотра БД, он автоматически форматирует столбец DATETIME.
// Initial questions still stand :)
Или нет, просто заметил, что обновил ответ - большое спасибо! На самом деле я пробовал тот же самый запрос несколько раз безрезультатно, главным образом потому, что мой WHERE неправильно указывал формат даты. Введено в заблуждение SQLWave :(
С этого момента вернемся к использованию командной строки !!!
"Какой оператор SQL мне понадобится, чтобы вытащить массив строк между датами X и Y?"
SELECT * FROM `dacc_data` where `date` between "2008-11-01" and "2008-12-01"
Не могли бы вы пояснить, «правильно ли это делать»? Достигаете ли вы желаемых результатов? Если нет, то каких результатов вы хотите достичь?