Avatar billede reimers Nybegynder
31. august 2004 - 13:51 Der er 15 kommentarer

Update i mysql uden at ændre dato

Hej,

jeg har oprettet en tabel i min mysql database, der ligner noget i stil med:

ID [int(10) unsigned auto_increment]
text [varchar(150)]
created [timestamp]

Jeg laver nogle kald til databasen gennem php. Bl.a.

UPDATE tabel SET text = 'noget tekst'WHERE ID = 2;

Når jeg forsøger at update feltet text ændres datoen i created  til d.d. som om jeg havde benyttet kommandoen NOW()? Jeg ønsker i midlertid at beholde den dato, der allerede er gemt i feltet.

Er der nogen der kan hjælpe?

Mvh.
Reimers
Avatar billede chries Nybegynder
31. august 2004 - 13:58 #1
Brug DateTime istedet for timestamp
Avatar billede chries Nybegynder
31. august 2004 - 13:58 #2
Avatar billede -thomas- Nybegynder
31. august 2004 - 13:59 #3
Det kan du gøre ved at skrive:

UPDATE tabel SET text = 'noget tekst', created = created WHERE ID = 2;
Avatar billede -thomas- Nybegynder
31. august 2004 - 14:01 #4
Meningen med TIMESTAMP er jo netop, at den opdateres med dags dato og tid, hver gang du udfører en INSERT eller en UPDATE. Hvis du ikke skal bruge denne funktion, skal du bruge DATETIME istedet som chries skriver.
Avatar billede dennismp Nybegynder
31. august 2004 - 14:02 #5
Det er godt nok en belastende feature MySQL har der. Burde tage mig sammen og skifte :)
Avatar billede -thomas- Nybegynder
31. august 2004 - 14:03 #6
Belastende feature??? Hvad mener du med det?
Avatar billede dennismp Nybegynder
31. august 2004 - 14:09 #7
Jeg syntes den er unødvendig. Det er vel egentlig et forsøg på at afhjælpe at MySQL ikke har triggers - men jeg ville hellere have undværet den ekstra kolonnetype, således at der kun fandtes DATETIME (Da TIMESTAMP jo er det samme, den bliver bare opdateret automatisk). Lidt det samme med auto_increment. Den er jeg heller ikke vild med.
Avatar billede -thomas- Nybegynder
31. august 2004 - 14:13 #8
Og hvilken database ville du så skifte til? Alle databaser jeg arbejder med har da TIMESTAMP-datatypen. Kan ikke se hvorfor den er unødvendig.
Avatar billede reimers Nybegynder
31. august 2004 - 14:48 #9
Jeg troede bare, at timestamp havde den fordel, at man kunne sætte datoen til 0. Nu synes jeg, at den bliver til 01.01.1970?

Jeg har nemlig også et felt med en udløbsdato. Den skal gerne sættes til 0, hvis der ikke er angivet en dato. Bruger et kald i stil med:

INSERT INTO tabel (text, created) VALUES ('noget tekst', '".date('Y-m-d H:i:s', 0)."')";
Avatar billede chries Nybegynder
31. august 2004 - 14:52 #10
timestamp = sekunder siden 01.01.1970. Så sætter du den til 0, bliver den 1.1.1970 :) du tænker nok på NULL :)
Avatar billede dennismp Nybegynder
31. august 2004 - 14:54 #11
reimers: Sæt den til NULL istedet. unix epoch er antal sekunder siden 01-01-1970.. 0 sekunder derfra, er jo 01-01-1990 :-).

thomas: Jeg syntes den er overflødig som datatype, da indeholder det samme som DATETIME. Den kan jo ikke indholde mere eller mindre af den grund. Forskellen ligger I at mysql opdaterer den automatisk. Det har jo ikke som sådan noget med datatypen at gøre.

Jeg ville gerne skifte til Oracle, men har ikke resourcer til det. Så Postgres er nok mit valg.
Avatar billede -thomas- Nybegynder
31. august 2004 - 15:02 #12
dennismp> det er rigtig nok - men jeg mener nu, at timestamp sparer mig for en del tid dagligt, da jeg ikke skal tage højde for at lægge dato og tid ind i feltet ved alle mine sql-opdateringer.
Så vidt jeg ved har Oracle og Postgre da også timestamp. Det samme har MSSQL og DB2.
Avatar billede dennismp Nybegynder
31. august 2004 - 15:07 #13
-thomas->> Jeg har ikke noget imod ordet "timestamp". Det er funktionen der ligger bag. (men det tror jeg du har fanget).. Og så vidt jeg kan se, gør timestamp ikke det når det er Oracle eller Postgres. Der er timestamp hvad datetime er i mysql. Fælles for de to er jo også, at man kan lave en trigger der opdaterer et felt automatisk ved fx. opdatering - så de har ikke behov for det. Anyway, det var vist et sidespor :)
Avatar billede -thomas- Nybegynder
31. august 2004 - 16:04 #14
dennismp> Ja, lad os ikke køre den længere :-)

reimers> Har du fået svar på dit spørgsmål? Mit svar 13:59:28 gjorde da præcis, hvad du bad om?
Avatar billede reimers Nybegynder
31. august 2004 - 16:13 #15
Ja, jeg har fået løsningen på problemet. Du har sikkert ret i, at din løsning ville virke, men det var jo tydeligt, at min brug af timestamp var fundamentalt forkert. Jeg har derfor valgt at benytte DateTime, som chries også anbefalede 13:58:08.

Tak for hjælpen alle sammen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester