Autor Zpráva
tatyalien
Profil
Dobrý den,
nevím jak mám udělat u reklamacích rozdíly mezy datumama. Narážím na problém v tomto:

V Db mam datumy (formát date - yyy-mm-dd), kde mám sloupce DatumRMA, DatumOdeslani, DatumPrijetiZeServisu, DatumVolaniZakaznikovi, DatumUkonceni. U všech sloupců je nastaveno základní hodnota na NULL.

Potřeboval bych si získat data, pokud není reklamace ukončená (není zadán DatumUkonceni), abych si jednoduše spočetl DatumRMA + 27 (musí být do 30 dní vyřízena, tak raději dávám 27, aby měl uživatel ještě 3 dny rezervu) je menší jak aktuální den, tak zobrazit výjezd.

Nevíte jak to jednoduše udělat?
nightfish
Profil
SELECT IFNULL(`DatumUkonceni`, DATE_ADD(`DatumRMA`, interval 27 DAY)) FROM `tabulka`
tatyalien
Profil
No tohle mě zobrazilo jen datumy, pokud si ale zadám dotaz typu:

SELECT *, IFNULL(`DatumUkonceni`, DATE_ADD(`DatumRMA`, interval 27 DAY)) FROM `hlavni_tb`


Tak jsou i ve výjezdu reklamace, co již jsou ukončené.
Kajman_
Profil *
Nejsem si jistý, ale možná hledáte něco jako
select * from `hlavni_tb` where `DatumUkonceni` is null and `DatumRMA`< date_sub(curdate(), interval 27 DAY)
tatyalien
Profil
Kajman_
Jo tohle je nejspíš ono.
Jen pro ujištění, tohle mě zobrazí celou tabulku, kde je hodnota DatumUkonceni NULL (není zadaná) a DatumRMA je menší jak DatumRMA+27 dni? Nebo to je k "dnešnímu" dni?
123456789
Profil *
To je to tak těžké vyzkoušet? Nebo snad neznáte fci date_sub()? (http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-sub), případně neznáte porovnávací operátory? (http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html), klauzuli where? (http://dev.mysql.com/doc/refman/5.0/en/select.html).
tatyalien
Profil
123456789
Klauzuly where a porovnávací operátory znám. Funkci date-sub opravdu neznám. Jednalo se mě jen o to, zda to bere v totmto dotazu dnešní den, nebo to rovnou může použít datum ze sloupce DatumRMA.
Možná pro vás to je brnkačka, ale já to prostě nevím a když nevím tak se zeptám, tak doufám, že "vám" to nevadí.
123456789
Profil *
Na http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-sub je v diskusi spousta odpovědí, divil bych se, kdyby alespoň z jedné se to nedalo pochopit. A i kdyby, stále tu máme i jiné zdroje informací než tento.

Nicméně `DatumRMA`< date_sub(curdate(), interval 27 DAY) dělá to, že k dnešnímu dni (dnešní datum získám funkcí curdate()) přičte 27 dní a pokud tento nový vypočítaný datum je větší než datum uvedený ve sloupci DatumRMA, tak to vrátí hodnotu TRUE, jinak FALSE.
nightfish
Profil
123456789:
že k dnešnímu dni (dnešní datum získám funkcí curdate()) přičte 27 dní
odečte
123456789
Profil *
Taky pravda :D
tatyalien
Profil
Děkuji za vysvětlení.

Tak stejně tahle podmínka neřeší můj problém. v podmínce where bych měl mít něco jako:
DatumRMA+27 =< dnesni den

// Edit
Zatím mě funguje toto:
select * from `hlavni_tb` where `DatumUkonceni` is null and  DATE_ADD(`DatumRMA`, interval +27 DAY) <= curdate()


Nebo jak by jste to rešily vy? Pokud by jste chtěli informovat uživatele, ktreré reklamce "hořej".
Kajman_
Profil *
U
DatumRMA+27 =< dnesni den

neumí využít mysql případný index, proto je lepší tu operaci přehodit na druhou stranu
DatumRMA =< dnesni den-27


Já bych vypsal klidně všechny nevyřešené seřazené podle data reklamace a třeba zvýraznil ty, na které chybí těch pár dní.
tatyalien
Profil
Kajman:
No momentálně dělám na to filtry, kde si uživatel zadá kritéria na vyhledávání v reklamacích, chtěl jsem tam dát možnost, že si zvolí i dny kolik zbejvaj, pokud nedá dny, tak se vypíšou všechny. Ale asi dodělám i to, že když zobrazí všechny, tak se zvírazněj ty co hořej ;), díky dobrej nápad ;)

neumí využít mysql případný index, proto je lepší tu operaci přehodit na druhou stranu
Nějak asi nechápu, ale když dám:
DatumRMA =< dnesni den-27

Nebude to zobrazovat nesmysly? Něco jako když vezmu že reklamace je 1.1.2010 a já na to budu koukat 10.1.2010 tak to vezme:
1.1.2010 =< (13.1.2010-27=>17.12.2009) --> vyhodnotí ano (správně)

ale ještě ta reklamace "nehoří" takhle by se zobrazily jen reklamace co jsou nevyřízené ne? Ale měly by se zobrazit jen reklamace co jsou ty "3" dny do konce.

// Pokud píšu nesmysly, tak se nečertěte, dnes už to balím, nějak mě to nemyslí :-(
Kajman_
Profil *
vyhodnotí ano (správně)
ale kdepak, Nový rok není dřív než půlka prosince minulého roku
tatyalien
Profil
Jo už to vidím :-D
Takže jsem to předělal dle tebe Kajman_e

select * from `hlavni_tb` where `DatumUkonceni` is null and  `DatumRMA` <= date_sub(curdate(), interval 27 DAY)

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: