Autor Zpráva
Martin Kovac
Profil
Mam tabulku rozvrhy v databaze kde mam polozky startTime a endTime. Dalej mam niekolko zaznamov napr. prvy zaznam ma startTime=7:00, endTime=9:00, dalsi zaznam ma startTime=12:00, endTime=13:00 a posledny zaznam ma startTime=13:45, endTime=15:15. Existuje SQL dotaz ktory by bol schopny vratit prave opacne casy? teda nie 7-9,12-13,13:45-15:15 ale 0-7,9-12,13-13:45,15:15-24? Alebo sa to musi riesit na niekolko SQL dotazov? Aky dotaz resp. skript navrhujete aby som vedel do pola zaznamenat prave takyto opacny cas?
Ak by niekto vedel poradit resp. strucne napisat navod ako spravne na to.
Vdaka
tiso
Profil
Martin Kovac - ako chceš z DB vrátiť niečo, čo tam nie je?
Mastodont
Profil
Možná na něco přijde Kajman, ale tady jde o intervaly mezi hodnotami z různých řádků, to bych řešil na aplikační úrovni.
mikul
Profil
Tak si jen v kódu přehoď časy začátků a konců.
Když bys to promyslel tak by to snad šlo ne?
Nazvu-li ty mezery - časy co chceš vypsat - jako přestávky, tak začátek přestávky je zárověň konec předchozí hodiny, a konec přestávky je zároveň začátek následující hodiny.
TomášK
Profil
Zkus
SET @time=0;
SELECT 
 start, end
FROM ( 
  SELECT
    @time AS start, 
    start AS end,
    @time := end AS next_start
  FROM 
    rozvrh
  ) AS t
UNION 
SELECT(@time, 24) 


Ale nejsem si jist, jestli to není cesta do horoucích pekel. Nevím, jestli nehrozí, že se někdy vyhodnotí @time := end dřív než @time, nevím, jestli se část za UNION vyhodnotí až poté, co se provede první SELECT. Bojím se, aby mi optimalizátor nezměnil pořadí, mám pocit, že už jsem se na tom spálil. Asi bych to řešil na úrovni php...

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: