Вопрос о дате и времени в MySQL

Я создал небольшое приложение, в котором есть 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.

Приносим извинения, если это немного бессвязно, надеюсь, что это понятно, но если вам нужна дополнительная информация, дайте мне знать.

Не могли бы вы пояснить, «правильно ли это делать»? Достигаете ли вы желаемых результатов? Если нет, то каких результатов вы хотите достичь?

Thomas Owens 02.12.2008 15:48

вы можете захотеть добавить mysql_real_escape_string к своим сообщениям, чтобы остановить инъекцию

Re0sless 02.12.2008 15:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
2 721
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Дата и время 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, он позволяет забыть о том, сколько дней в месяце.

benlumley 02.12.2008 16:31

Ты прав. Я могу подтвердить, что в базе данных есть «ГГГГ-ММ-ДД ЧЧ: ММ: СС» - я использую редактор 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"

Другие вопросы по теме