2008-12-02 2 views
1

Я создал небольшое приложение, которое имеет управление пользователями, консоль интерфейса, чтобы вводить данные и консоль бэкэнда для управления частями интерфейса. Интерфейс добавляет строки в базу данных MySQL, которые имеют временную метку. Бэкэнд должен иметь возможность выбирать строки из базы данных между датами X и Y.php mysql дата/время вопрос

Все работает до сих пор, кроме даты, с которой я действительно борется.

Фронтэнд ввод 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 в моей таблице. Он отображается как dd/mm/yyyy hh: mm: ss в базе данных.

Итак, мой первый вопрос - это правильный способ сделать это?

Второй вопрос: какой оператор SQL должен был бы вытащить массив строк между датой X и Y.

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

+0

ps MySQL и PHP версия 4. – suitedupgeek 2008-12-02 12:40:32

+0

Не могли бы вы пояснить, «это правильный способ сделать это»? Достигаете ли вы результатов, которые вы хотите? Если нет, то какие результаты вы хотите достичь? – 2008-12-02 12:48:42

ответ

6

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

YYYY-MM-DD HH: MM: SS

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

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

0

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

// Initial questions still stand :) 

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

Назад к использованию командной строки теперь !!!

0

«какой SQL заявления мне нужно вытащить массив строк между X и Y датами?»

SELECT * FROM `dacc_data` where `date` between "2008-11-01" and "2008-12-01"