php mysql дата / время вопрос - PullRequest
1 голос
/ 02 декабря 2008

Я создал небольшое приложение, в котором есть Управление пользователями, консоль внешнего интерфейса для ввода данных и внутренняя консоль для управления частями внешнего интерфейса. Интерфейс добавляет в базу данных 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.

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

Ответы [ 3 ]

6 голосов
/ 02 декабря 2008

MySQL datetime должен быть отформатирован тире:

ГГГГ-ММ-ДД ЧЧ: ММ: СС

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]';

где «таблица» - это имя таблицы базы данных, а «дата» - это имя вашего поля даты и времени.

0 голосов
/ 02 декабря 2008

"Какой SQL-оператор мне нужен, чтобы вытащить массив строк между датами X и Y?"

SELECT * FROM `dacc_data` where `date` between "2008-11-01" and "2008-12-01"
0 голосов
/ 02 декабря 2008

Вы правы. Я могу подтвердить, что база данных имеет «ГГГГ-ММ-ДД ЧЧ: ММ: СС» - я использую редактор SQLWave для быстрого просмотра БД, он автоматически форматирует столбец DATETIME.

// Initial questions still stand :)

Или нет, только что заметил, что вы обновили ответ - большое спасибо! Я на самом деле пробовал один и тот же запрос несколько раз безрезультатно, в основном из-за того, что в моем WHERE был неверно указан формат даты. Введено в заблуждение SQLWave: (

Вернуться к использованию командной строки с этого момента !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...