Autor Zpráva
honzisko
Profil
Zdravím,

rád bych se zeptal na možnost zápisu (aktualizace položky ) do databáze po určitém časovém úseku. Tzn. Chtěl bych do databáze zapsat IP adresu a dalších 24h. ji již nezapisovat a po uplnyutí 24h. tuto adresu znova zapsat ( aktualizovat údaj v databázi ).

Řešil bych to podmínkou ale nevím, jak ochránit ten zápis co 24h.

Předem díky.
RockFire
Profil
K zápisu do databáze si ulož časový údaj a než zapíšeš, zkontroluj, jestli už uplynulo 24 hodin.
honzisko
Profil
tzn. tedy první vyselektovat data z databáze, poté porovnat datum a následně uložit, nepletu li se?
RockFire
Profil
Ano, přesně tak.
honzisko
Profil
ještě se rád zeptám, v jakém formátu uložit datum do databáze ať se dobře vypisuje a porovnává? nejlépe datetime? A taky jak na samotné porovnání ( jak porovnat že již uběhlo 24 hodin )
Joker
Profil
honzisko:
v jakém formátu uložit datum do databáze ať se dobře vypisuje a porovnává?
Obvykle DATETIME.
RockFire
Profil
honzisko:
v jakém formátu uložit datum do databáze ať se dobře vypisuje a porovnává?
Preferuji obyčejný INT a funkci time(), která vygeneruje aktuální čas (počet sekund od 1.1.1970), čili porovnávání je snadné a výpis pak pomocí např. date("formát času", $hodnotazdb);
juriad
Profil
RockFire:
A jak potom počítáš například počet položek v jednotlivých měsících? Aha, ono to při uložení datumu jako INT není možné (bez použití funkce FROM_UNIXTIME v databázi)
SELECT MONTH(datum), COUNT(*) FROM tabulka GROUP BY MONTH(datum)

Porovnání je stejně náročné, operátor < funguje. Formátovat musíš tak jako tak.
Prosím, neraď hlouposti.
RockFire
Profil
juriad:
Například tak, že si zvolím začátek a konec měsíce pomocí funkce strtotime a vyberu vše mezi včetně (aha, ono to je možné). Neříkám, že je moje řešení nejlepší, pouze nabízím alternativu. Takže hlouposti neradím, kdežto ty je píšeš.

Pokud se mnou budeš v budoucnu chtít komunikovat, zvol prosím jinou formu. Na další podobnou zprávu nebudu reagovat.
juriad
Profil
RockFire:
Na moji úlohu navrhuješ řešení, které nefunguje. Zajímá mě, kolik položek (třeba objednávek) je z ledna, února, března, ...; prostě vypočítat histogram pro 12 měsíců, a aby to bylo zajímavější uvažuj, že máš objednávky za posledních 20 let.

Nechci se hádat, jen ukazuji problémy tvého návrhu. S označením hloupost jsem to přehnal, někdy může být INT užitečný.
RockFire
Profil
juriad:
Příklad jsem pochopil trochu jinak, tohle by byl opravdu problém. Nicméně nic takového honzisko nepožadoval, naopak z jeho příkladu jasně vyplívá, že nic takového potřebovat nebude. Tedy byla má alternativa též použitelná.
juriad
Profil
honzisko:
... WHERE cas < DATE_SUB(NOW(), INTERVAL 1 DAY)

RockFire:
A tady je i vidět rozdíl mezi našimi řešeními. Prosté odečtení 24*60*60 != předchozí den ve stejnou dobu: rozdíl nastane při přechodu na letní čas. Otázkou je, kterou interpretaci 24h si honzisko vybere.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: