Autor | Zpráva | ||
---|---|---|---|
tatyalien Profil |
#1 · Zasláno: 13. 1. 2010, 13:49:03
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 |
#2 · Zasláno: 13. 1. 2010, 14:13:11
SELECT IFNULL(`DatumUkonceni`, DATE_ADD(`DatumRMA`, interval 27 DAY)) FROM `tabulka` |
||
tatyalien Profil |
#3 · Zasláno: 13. 1. 2010, 16:03:01
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 * |
#4 · Zasláno: 13. 1. 2010, 16:39:22
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 |
#5 · Zasláno: 13. 1. 2010, 17:04:56 · Upravil/a: tatyalien
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 * |
#6 · Zasláno: 13. 1. 2010, 17:30:11
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 |
#7 · Zasláno: 13. 1. 2010, 18:34:13
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 * |
#8 · Zasláno: 13. 1. 2010, 19:30:30
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 |
#9 · Zasláno: 13. 1. 2010, 19:43:08
123456789:
„že k dnešnímu dni (dnešní datum získám funkcí curdate()) přičte 27 dní“ odečte |
||
123456789 Profil * |
#10 · Zasláno: 13. 1. 2010, 21:38:42
Taky pravda :D
|
||
tatyalien Profil |
#11 · Zasláno: 13. 1. 2010, 21:55:56 · Upravil/a: tatyalien
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 * |
#12 · Zasláno: 13. 1. 2010, 23:33:14
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 |
#13 · Zasláno: 14. 1. 2010, 00:46:08 · Upravil/a: tatyalien
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 * |
#14 · Zasláno: 14. 1. 2010, 08:46:19
vyhodnotí ano (správně)
ale kdepak, Nový rok není dřív než půlka prosince minulého roku |
||
tatyalien Profil |
#15 · Zasláno: 14. 1. 2010, 09:13:00 · Upravil/a: tatyalien
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) |
||
Časová prodleva: 14 let
|
0