mysql timestamp, mi a kulonbseg, azaz ma en vagyok a hulye sorozat elso resz

miert van az, hogy a select (CURRENT_TIMESTAMP - lastrun) ahol a lastrun egy timestamp mezo a tablaban hulyeseget ad vissza?

en masodpercben szeretnem megkapni a kulonbseget, ez meg neha ugrik 30at...

Hozzászólások

nem hiszem..


mysql> select TIMESTAMPDIFF(SECOND,lastrun,CURRENT_TIMESTAMP), (CURRENT_TIMESTAMP - lastrun) from periodicbroadcasts;
+-------------------------------------------------+-------------------------------+
| TIMESTAMPDIFF(SECOND,lastrun,CURRENT_TIMESTAMP) | (CURRENT_TIMESTAMP - lastrun) |
+-------------------------------------------------+-------------------------------+
|                                             145 |                           225 |
+-------------------------------------------------+-------------------------------+
1 row in set (0.00 sec)

doksiban semmi okosat nem talaltam, es nem akarok belso fgvt hasznalni mert nem akarok NativeQueryzni javabol.

A gond ott van, hogy a now() függvény értéke nem timestamp.

mysql> select CURRENT_TIMESTAMP + 0;
+-----------------------+
| CURRENT_TIMESTAMP + 0 |
+-----------------------+
| 20081015180635.000000 |
+-----------------------+
1 row in set (0.00 sec)

Andi, really. Take it from me. If I tell you something, I'm usually right.

hat jo, de:


mysql> select (CURRENT_TIMESTAMP - lastrun),current_timestamp+0 - lastrun+0,TIMESTAMPDIFF(SECOND,lastrun,CURRENT_TIMESTAMP) from periodicbroadcasts;
+-------------------------------+---------------------------------+-------------------------------------------------+
| (CURRENT_TIMESTAMP - lastrun) | current_timestamp+0 - lastrun+0 | TIMESTAMPDIFF(SECOND,lastrun,CURRENT_TIMESTAMP) |
+-------------------------------+---------------------------------+-------------------------------------------------+
|                           399 |                             399 |                                             239 |
+-------------------------------+---------------------------------+-------------------------------------------------+
1 row in set (0.00 sec)

es ez mar megis magyarazza az ugrasokat, hiszen amint a perc helyiertek no, o azt nem 60al noveli, hanem 100al.

kiprobaltam, csinaltam 1 tablat:


CREATE TABLE `proba` (
  `ts` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `proba` (`ts`) VALUES 
('2008-10-15 23:46:36');

ha erre a kovetkezo query-t futtatom, akkor fix idonkent tenyleg megugrik a masodik field erteke:


select 
TIMESTAMPDIFF(SECOND,ts,CURRENT_TIMESTAMP), (CURRENT_TIMESTAMP - ts) from proba;

viszont a kovetkezo queryvel mukodik szepen:


select 
TIMESTAMPDIFF(SECOND,ts,CURRENT_TIMESTAMP), (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(ts)) from proba;

a miertet most passzolom ilyentajt.

Tyrael

en tudom miert. ugy tarolja, hogy 200810151214 pl, es szamkent(!) vonja ki.

beszeltem a mysqlesekkel, trollnak hivtak es aztmondtak hasznaljak pgsqlt :) [komolyan, freenodeon
megkerdeztem oket. meg az SQL szabvany idevago pontjat is megmutattam(!!) de leszartak.]

az a baj, hogy nem hasznalhatok beepitett fgvket, mert ahoz mar irnom kell egy mappingot az entitasok
es a nativequery koze.. :)

lekene kerdeznem egy tablabol azokat az adatokat, amiknel a lastrun es a mostani ido kulonbsege masodpercben nagyobb mint a recurring_interval. :)

a helyzetet bonyolitja, hogy EntityManager -en keresztul, createQuery() -vel, ahol JPQL -t szeretnek hasznalni. ezert nem hasznalhatom a beepitett fgvket, mint UNIX_TIMESTAMP [imho]

lehetne nativ queryt is irni, csak akkor a mappel szivnek.

Applikacios szerver es a db szerver mennyire van szinkronban idot tekintve?
mi lenne ha valami olyasmit mondanal, hogy
SELECT * FROM table WHERE field < ([applikaciobol aktualis lekerdezett datum - recurring_interval] datetime formatumban)
tehat meg applikaciobol kiszamolni azt a datumot, aminel korabbi lastrun fielddel rendelkezo sorokat vissza szeretned kapni.
ha recurring_interval is field, akkor az szopo. :)

Tyrael