MySQL typ timestamp

Školení, která pořádám

MySQL před verzí 5 sice nemá triggery, ale první sloupec typu timestamp v tabulce se sám aktualizuje, ať chceme nebo ne. Jeho nejčastější použití proto asi bude pro uchování času poslední modifikace záznamu. Před verzí 4.1 měl tento typ formát YYYYMMDDhhmmss a dala se určit jeho přesnost, v novějších verzích má stejný formát jako datetime a navíc se dá ovlivnit, jestli se má nastavovat na aktuální čas zvlášť při vytváření a při modifikaci.

Použití tohoto typu sloupce může kód zjednodušit a sjednotit, protože při každém UPDATE nemusíme myslet na aktualizaci tohoto sloupce. Jeho použití je ale určitě na vlastní riziko, protože např. hromadné aktualizace všech záznamů v tabulce tento sloupec samozřejmě také nastaví na aktuální čas a tím ho pro naše potřeby mohou znehodnotit. Pokud se sloupec aktualizovat nemá, dá se použít následující konstrukce:

<?php
mysql_query("UPDATE clanky SET perex = CONCAT('<p>', perex, '</p>'), zmeneno = zmeneno WHERE perex NOT LIKE '<p>%'");
?>

Přijďte si o tomto tématu popovídat na školení Návrh a používání MySQL databáze.

Jakub Vrána, Výuka, 15.2.2006, diskuse: 9 (nové: 0)

Diskuse

ikona spaze:

TIMESTAMP může mít formát 'YYYY-MM-DD HH:MM:SS' i před verzí 4.1. Konkrétně to zařídí switch --new, který je dostupný od 4.0.13. http://dev.mysql.com/doc/refman/4.1/en/server-options.html

Spud:

Proc se sloupec neaktualizuje zrovna pri tom uvedenem sql dotazu -  nevidim v nem zadnou specialni konstrukci, ale je to ten uplne nejbeznejsi UPDATE dotaz, ne?

Gimli2:

2Spud: Imho to je tim zmeneno = zmeneno, kde tomu vnutim to co tam bylo. Ale jen hadam...

Spud:

Aha, jo jako ze timestamp sloupec se jmenuje 'zmeneno' a pak se mu vklada ta sama hodnota co mel predtim ... tak to jo :-)

Dave:

skvělá věc, používám často, ale nevíte jestli se dá pracovat s takto uloženým datem? jak ho třeba zobrazit jen ve formátu DD-MM-YYYY a tak (podobně jak se dá formovat časové razítko přes date()...) diky za odpověď

honzaud:

Ahoj poradími někdo? Potřebuji převést datum dle timestamp do evropského formátu, ale bez času !!!

Už jsem udělal celý převod, ale pořád mi to vypisuje i čas a to nechci.
<?PHP
$a7
= preg_replace('~^([0–9]+)-0?([0–9]+)-0?([0–9]+)~', '\\3.\\2.\\1', $r['date']);
?>
díky za odpověď

ikona Jakub Vrána OpenID:

Na konec regulárního výrazu přidej .*

Arcanis:

Nešly by použít místo regulárního výrazu spíš paramatry fce date()? ta ti udělá z timestampu datum, čas, podle toho jak určíš.
http://php.net/manual/en/function.date.php

Jimmy:

Přesně, dle mého názoru je lepší použít konstrukci:

<?php
    $a7
= date('d-m-Y', strtotime($r['date']));
?>

Prípadně, je-li potřeba s datem dále pracovat:
<?php
    $ad7
= new DateTime($r['date']);
   
$a7 = $ad7->format('d-m-Y');
?>

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.