Autor Zpráva
slon_cz
Profil
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
Pokud cas a datum nejsou varchar ale time a date, tak to možné je.
slon_cz
Profil
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
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
to ano, ale jak převedu 12h07m41s na pocet sekund a pak zase ve vypisu na format XHXMXS?
Keeehi
Profil
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
To jsou věci, který určitě řešilo spoustu lidí už před tebou, např. na stackoverflow
slon_cz
Profil
Aplikace to posílá v tomto formátu bohužel :/
Kajman
Profil
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
$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;
Měl bych tedy čas rovnou převádět na sekundy a ty pak ukládat do databáze a potí ve výpisu je převádět zpět na čas? Děkuji za pomoc, vážím si toho, už to řeším několik dní.
Kajman
Profil
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
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
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');

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: