Autor | Zpráva | ||
---|---|---|---|
honzisko Profil |
#1 · Zasláno: 23. 4. 2013, 13:01:29
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 |
#2 · Zasláno: 23. 4. 2013, 13:03:20
K zápisu do databáze si ulož časový údaj a než zapíšeš, zkontroluj, jestli už uplynulo 24 hodin.
|
||
honzisko Profil |
#3 · Zasláno: 23. 4. 2013, 13:14:04
tzn. tedy první vyselektovat data z databáze, poté porovnat datum a následně uložit, nepletu li se?
|
||
RockFire Profil |
#4 · Zasláno: 23. 4. 2013, 14:17:54
Ano, přesně tak.
|
||
honzisko Profil |
#5 · Zasláno: 23. 4. 2013, 16:42:04
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 |
#6 · Zasláno: 23. 4. 2013, 16:53:27
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 |
#8 · Zasláno: 23. 4. 2013, 18:05:05
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 |
#9 · Zasláno: 23. 4. 2013, 18:31:43
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 |
#10 · Zasláno: 23. 4. 2013, 18:57:54
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 |
#11 · Zasláno: 23. 4. 2013, 19:13:46
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 |
#12 · Zasláno: 23. 4. 2013, 19:25:35
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. |
||
Časová prodleva: 11 let
|
0