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.
Diskuse
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ěď
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.