Autor Zpráva
Matess
Profil *
Dobrý den,

potřeboval bych poradit jak vypsat data z databáze, tak aby se data zobrazovala jen v jednom řádku.

Mám tabulku:
id | datum | prichod | odchod
-----------------------------
1 | 2019-1-1 | 6:00:00 | NULL
1 | 2019-1-1 | NULL | 14:00:00
1 | 2019-1-2 | 7:00:00 | NULL
1 | 2019-1-2 | NULL | 15:00:00

Teď, když vypíšu data, tak se vypíšou vlastně přesně jak je to v tabulce - což je v pořádku.
Já bych ale potřeboval vypsat data s jedním datumem na jeden řádek.
Čili aby mi to vypsalo:
1 | 2019-1-1 | 6:00:00 | 14:00:00
1 | 2019-1-2 | 7:00:00 | 15:00:00

Lze toho nějak docílit?

Popřípadě, že ne, tak jak jinak mám navrhnout tabulku, abych zvládl vypsat časy, tak jak potřebuji?
Jedná se o jednoduchý docházkový systém.

Děkuji za vaše nápady.
blaaablaaa
Profil
Proč to rovnou není v jednom řádku? Vždy musí existovat příchod + odchod (nebo NULL, pokud ještě neodešel)
Zapisoval bych tři sloupce - id uživatele, datum a čas příchodu a odchodu (co kdyby časem přišla nutnost zapsat docházku přes noc?).
Kajman
Profil
Taky bych to tak viděl. Tedy odchod najde poslední příchod daného zaměstnance. Zkontroluje, že je u něj odchod null a updatuje null na chtěný datetime. Odchody bez příchodu si můžete dávat to tabulky s chybami a pak je projít a udělat případně ruční doplnění docházky.

Pokud vyžadujete sloupce (date, time, time) místo (datetime, datetime), tak ten odchod může ještě kontrolovat datum a případně doplní 23:59:59 a přidá další řádek (či řádky) s příchodem 0:00.

Pokud to ale nejde změnit a data dostáváte od třetí strany, tak to splácnutí také půjde. Asi by se to lépe psalo, pokud máte databázi s podporou window funkcí.

Ještě pozor. U některých databází je potřeba pro správný počet hodin používat s datumem i časovou zónu (nebo duplikovaný sloupec s GMT časem), aby se správně spočítaly hodiny při přechodu na letní čas a zpět.
HajekJirka
Profil
Děkuji za vaše postřehy.
Zkusím to teda udělat do jednoho řádku.

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:

0