2012-05-11 5 views
0

«Мне нужно создать поле, которое будет отображаться количество дней между датой и по настоящее время.Как Trigger общее количество дней в MySql

TABLE: reg_add 

+------------+---------+ 
| Name  | Type | 
+------------+---------+ 
| hm_date | date | 
+------------+---------+ 
| total_days | date | 
+------------+---------+ 

Мой клиент будет ввести следующую дату, например в «hm_date»: 1 мая 2012 г.

мне нужно «total_days», чтобы показать общее количество дней в период с 1 мая 2012 года на текущую дату

Я хочу, чтобы достичь этого на стороне сервера, который. несколько новый для меня.

мне нужно создать TRIGGER всегда есть «total_days» обновленные

я начал с этим, и у меня возникают проблемы, делая триггер и получить его правильно:

SELECT DATEDIFF(curdate(),hm_date) as total_days FROM reg_add 

Любая помощь будет оценили.

Эрик

+2

Почему 'total_days' типа' date'? – RedFilter

+0

Другой член рекомендовал его мне.Клиент всегда будет вводить свою дату в следующем формате: «23 июня 2008 г.» – Erik

+0

Я думал, что «hm_date» - это поле, содержащее клиентский ввод. – RedFilter

ответ

0

Эрик, я использую TSQL, и не знаком с MySql, но в TSQL функция DATEDIFF требует 3 параметров. Sytax является

DATEDIFF(date part, date1, date2).

Я хотел бы попробовать DATEDIFF(d,GETDATE(),hm_date) AS total_days FROM reg_add

+0

Его SQL отлично работает для получения дней в MySQL. По его словам, ему нужно создать «Триггер», чтобы всегда обновлять total_days. –

+0

Также, вопрос RedFilter на вашем оригинальном посте является важным. Результат DATEDIFF будет значением типа INT для количества дней между ними. Не нужно пытаться создать тип переменной DATETIME в качестве владельца места. – gmaness

+0

«hm_date» (клиентский вход & поле) должен быть тем типом? – Erik

1

Я посмотрел в MySQL Trigger Документы и от взглядов этого, вы можете только создать триггер для типов событий Insert, Обновить и Удалить. Таким образом, ваш Trigger фактически не обновит ваше поле total_days (которое должно быть int), как вы этого хотите. [Похоже, вы хотите, чтобы он обновлял ваше поле на основе времени (ака каждое обновление за x часов)].

Вот Документы: http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

Я бы предложил писать хроны в PHP, который выполняется один раз (или несколько раз) в день, который будет обновлять поле для вас.

В вашем хрон вы должны просто запустить один SQL заявление: (Это должно пройти через весь стол и обновить поле total_days для каждой строки)

UPDATE reg_add SET total_days = DATEDIFF(curdate(),hm_date) 
+0

Итак, если клиент выполняет поисковый запрос, я могу добавить этот скрипт PHP в поисковый запрос. Да? – Erik

+0

Нет. Если это маршрут, на который вы хотели бы пойти, я бы предложил сделать работу Cron на вашем веб-сервере. Однако из-за звука вашего последнего комментария, почему бы просто не сделать датированный в вашем sql? как вы выполняете поиск и используете общие дни? –

2

Вы можете вычислить его на лету очень легко , используя TIMESTAMPDIFF функцию -

SELECT TIMESTAMPDIFF(DAY, hm_date, NOW()) FROM reg_add; 
0

Вместо триггеров, вы можете использовать Фото:

CREATE VIEW reg_add_with_total_days_VIEW 
    AS 
SELECT hm_date 
    , DATEDIFF(CURDATE(), hm_date) AS total_days 
FROM reg_add ; 

Затем вы можете использовать вид, каждый раз, когда вам нужно общее количество дней - которые будут рассчитаны на лету:

SELECT hm_date, total_days 
FROM reg_add_with_total_days_VIEW 

Вы можете видеть, что это работает в SQL-Fiddle

Смежные вопросы