Autor | Zpráva | ||
---|---|---|---|
slon_cz Profil |
#1 · Zasláno: 23. 1. 2018, 18:27:35
Zdravím, moc se ještě v sql příkazech nevyznám a v databázi mám tabulku, kam se zapisuje ve formátu
nazev | nick | cas | datum xxxx | ddd | 12h07m41s | datum xxxdx | dqdd | 12h014m41s | datum xxsxx | dddd | 12h07m41s | datum v souboru mam promennou $cas, ve ktere je aktualni cas, jako se zapisuje do databaze a ja bych potreboval zjistit, zda je mozne jednim prikazem zjistit, zda se v databazi nachazi nejaky zaznam v okruhu 5 minut okolo $cas. Je to vubec mozne? Děkuji |
||
Kajman Profil |
#2 · Zasláno: 23. 1. 2018, 18:46:48
Pokud cas a datum nejsou varchar ale time a date, tak to možné je.
|
||
slon_cz Profil |
#3 · Zasláno: 23. 1. 2018, 20:24:08
datum je timestamp a cas je varchar, avšak mohu to změnit. Pokud by to tedy bylo změněno, jaký by byl postup na sestavení daného sql příkazu? Děkuji
|
||
Keeehi Profil |
slon_cz:
Pokud je sloupec datum typu timestamp, není to spíš datum i čas najednou? Nebo to záměrně ořezáváš a ukládáš tam timestamp půlnoci daného dne? Pokud je to normální timestamp, tak dotaz je primitivní. '... WHERE datum BETWEEN ' . ($cas - 300) . ' AND ' . ($cas + 300) . '...'; |
||
slon_cz Profil |
timestamp je jen datum, kdy byl zaznam ulozen, pole "cas" obsahuje hodina:minuta:sekunda jen a podle tohoto pole potrebuji
Jen upřesním, že "cas" je stopa videa, tedy hodina:minuta:sekunda a pokud se ulozi zaznam v case 1:25:34, tak pokud nebude alespon 1:30:34, tak dalsi zaznam ulozit nepujde, takto jsem to myslel :) |
||
Kajman Profil |
#6 · Zasláno: 24. 1. 2018, 01:08:55
Pokud budete ukládat čas jako počet sekund od začátku, tedy místo řetězce 12h07m41s číslo 43661, tak hledání bude opět primitivní.
|
||
slon_cz Profil |
#7 · Zasláno: 24. 1. 2018, 15:26:02
to ano, ale jak převedu 12h07m41s na pocet sekund a pak zase ve vypisu na format XHXMXS?
|
||
Keeehi Profil |
#8 · Zasláno: 24. 1. 2018, 16:18:33
slon_cz:
Formátování výpisu je primitivní. Trochu horší je to s převodem stopáže na sekundy. Samozřejmě i to je možné, ale mnohem hezčí by bylo, kdyby se to dělat nemuselo. Odkud tu hodnotu získáváš? Z nějaké aplikace? Není tam možnost, aby to posílala už ona rovnou jako počet sekund? |
||
T-fon Profil |
#9 · Zasláno: 24. 1. 2018, 16:19:04
To jsou věci, který určitě řešilo spoustu lidí už před tebou, např. na stackoverflow
|
||
slon_cz Profil |
#10 · Zasláno: 25. 1. 2018, 21:57:10
Aplikace to posílá v tomto formátu bohužel :/
|
||
Kajman Profil |
#11 · Zasláno: 25. 1. 2018, 22:01:50
Ale ukázky převodních funkcí máte v odkaze, tak v čem je problém to převést a v databázi interně pracovat v sekundách?
|
||
slon_cz Profil |
#12 · Zasláno: 26. 1. 2018, 00:07:52
$str_time = "23h12m95s"; $str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time); sscanf($str_time, "%h:%m:%s", $hours, $minutes, $seconds); $time_seconds = $hours * 3600 + $minutes * 60 + $seconds; |
||
Kajman Profil |
#13 · Zasláno: 26. 1. 2018, 00:21:39
Ano, já bych to tak dělal, jen v tom příkladu jste provedl náhradu dvojteček za hms jen v prvním řádku, jinak všude vůbec nebo chybně.
Když je hodnota třeba jen 10 sekund, tak aplikace pošle "0h0m10s" ne jen "10s"? |
||
slon_cz Profil |
#14 · Zasláno: 26. 1. 2018, 00:50:44
pošle 0h0m10s, tudíž formát bude vždy stejný, tam by problém nastat neměl. Ano nahradil jsem to jen na začátku, pro ukázku, jinak už to zpracovávám do celého kodu.
|
||
Kajman Profil |
#15 · Zasláno: 26. 1. 2018, 00:58:39
Tak v tom případě nemusíte řešit chybějící hodiny a stačí jednoduše
function str2seconds($str) { sscanf($str, "%dh%dm%ds", $hours, $minutes, $seconds); return $hours * 3600 + $minutes * 60 + $seconds; } echo str2seconds('12h07m41s'); |
||
Časová prodleva: 7 let
|
0