Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > авто датирование записи


Автор: bars80080 21.3.2008, 12:19
вдруг неожиданно задался вопросом,

а в MySQL нельзя ли вытащить дату последнего изменения записи?

т.е. что-то типа автоматического датирования

а то в половине случаев приходится вставлять поле последнего изменения

Автор: Feldmarschall 21.3.2008, 12:33
Нету.

Не понимаю претензии "приходится вставлять".
То же самое можно сказать про автоинкремент: приходится вставлять. И про индексы. И вообще про все на свете.
Есть механизм, и "вставлять" его, или не вставлять - дело программиста.

Тип timestamp для того и был придуман. Хочешь - используй, не хочешь - не используй.

Автор: bars80080 21.3.2008, 12:53
жаль,


нет вопрос исключительно оттого, а вдруг?
тогда получилось бы, что лишней работой занимаюсь

Автор: Feldmarschall 21.3.2008, 13:04
Может, я неправ, но идеология базы данных сродни идеологии конструктора.
Все, что тебе нужно, ты должен собрать сам.
БД представляет из себя черный ящик, который сам ничего не делает - весь функционал ты формируешь сам. В том числе - и подбором полей.

Автор: ksnk 21.3.2008, 13:05
bars80080, А почитать про тип TIMESTAMP?
У MySql такая фенечка, что если при создании поля не указать его значение по умолчанию, то если добавлять запись и НЕ СТАВИТЬ ему ничего - в поле вставится дата последнего изменения...
Код

CREATE TABLE `xxx` (
  `ID` varchar(255)  NOT NULL default '',
  `value` text  NOT NULL,
  `TIME` timestamp NOT NULL 
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM 

INSERT INTO `xxx`(ID,value) VALUES
('id', 'xxx');


P.S. за сокращенную форму операции INSERT - не уверен, а так должно работать...

Автор: bars80080 21.3.2008, 13:36
ksnk, так оно и оказалось:  smile 
Код

CREATE TABLE `xxx` (id int unsigned not null auto_increment primary key, `value` varchar(20), `TIME` timestamp NOT NULL) 
INSERT INTO `xxx` (value) VALUES ('qwer') 
select * from xxx 
INSERT INTO `xxx` (value) VALUES ('rtyu') 
select * from xxx 
update xxx set value='zxcv' 
select * from xxx 
INSERT INTO `xxx` (value) VALUES ('bnmgh') 
update xxx set value='654894' where id=1 
select * from xxx 


Код
Array[3]
   0 => Array[3]
      id => "1"
      value => "654894"
      TIME => "20080321123220"
   1 => Array[3]
      id => "2"
      value => "zxcv"
      TIME => "20080321123118"
   2 => Array[3]
      id => "3"
      value => "bnmgh"
      TIME => "20080321123152"

запись за id=1 имеет более старую дату
дата в этом поле обновляется при запросах и insert и update

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)