MySQL typ timestamp
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
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ěď
Jakub Vrána
:
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.

