Autor Zpráva
bach
Profil
Dobrý den, mám bohužel v databázi uložen datum a čas odděleně, každý ve své buňce. Lze nějak najít záznam odpovídající tomuto zadání: vypiš všechny záznamy od aktuálního času mínus 15h , čili všechny záznamy co byly přes 15 hodinami po nyní? děkuji.
Tomášeek
Profil
bach:
Dát datum a čas do sloupce datetime je ideální řešení, proč tabulku neupravíš a záznamy nepřeuložíš tak, jak mají být?

Data jde vydolovat i se dvěma sloupci, budeš muset vědět, jaký je aktuální čas.

1. Pokud více jako 15:00, hledáš záznamy jen ze dnešního dne, max. 15 hodin staré.
2. Pokud je méně než 15:00, bereš všechny dnešní a ze včerejška ty, aby to bylo max. do 15 hodin staré (čili první včerejší záznam bude 24:00 - (15:00 - 14:14))... 23:14. Přepodčítat to budeš muset asi v PHP, nevím, jestli to půjde na úrovni DB.
Kajman
Profil
SELECT *
FROM   tabulka
WHERE  ( datum = Date(Subdate(Now(), INTERVAL 15 hour))
         AND cas >= Time(Subdate(Now(), INTERVAL 15 hour))
          OR datum > Date(Subdate(Now(), INTERVAL 15 hour)) )  

Případně mysql umí pro lidi čitelnější zápis
WHERE  ( datum, cas ) >= ( Date(Subdate(Now(), INTERVAL 15 hour)), Time(Subdate(Now(), INTERVAL 15 hour)) )
Ale měla (možná ještě má) s tímto zápisem problém, že nevyužila případný index nad dvěma sloupci (datum,cas) tak dobře, jako první zápis s OR.
bach
Profil
Kajman:
Děkuji to je přesně ono, funguje v mariadb i druhý jednoduchý zápis, ještě jednou díky.
Kajman
Profil
Co o to, on funguje, ale v popsané situaci může být výrazně pomalejší než první zápis. Porovnáváno na MariaDB 10.2 - když uděláte nad tou kombinací sloupců index, tak to první dotaz zrychlí, druhý zpomalí.

Pokud ten dotaz chcete dělat často a je dobré ho mít rychle, použijte první zápis a udělejte si ten index.

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: