Autor | Zpráva | ||
---|---|---|---|
John Doe Profil * |
#1 · Zasláno: 11. 9. 2014, 12:34:55
Dobrý deň,
neviem si rady s výberom dátumu z databáze. Mám tabuľku ktorá má nasledovnú štruktúru. id from to actionId desc active state 1 2012-09-12 2012-12-31 1 Oprava 0 2 2 2012-10-12 0000-00-00 1 Oprava 0 1 3 2013-11-13 2012-12-17 2 Oprava 0 2 4 2013-02-07 2014-04-20 1 Oprava 0 2 5 2013-03-12 0000-00-00 1 Oprava 0 1 6 2014-07-12 2014-07-20 1 Oprava 0 2 Cez html formulár nahodím záznam, napr. posledný záznam vpodstate hovorí že 12.,07.2014 začala nejaká oprava a skončila 20.7.2014. Samozrejme pri zadávaní sa najskôr zadáva from a až po dokončení to, preto môže nastať situácia s nulovým to (napr. pri id 5 alebo 2). Pre kontrolu si chcem cez iný formulár vytiahnuť info čo som robil napr. 13.10.2012. myslel som že by to malo ísť pomocou dotazu: SELECT * FROM `opravy` WHERE '2012-10-13' BETWEEN `from` AND `to` ten ale vráti len záznam kde id = 1, ja ale potrebujem aj id = 2, pretože tá oprava tým pádom stále prebieha. Nemáte niekto nápad ako si s tým poradiť? Mňa napáda len to že urobím nejakú podmienku že ak to obsahuje 0000-00-00 tak nech ho v dotaze nahradí dnešným dátumom ale nezdá sa mi to ako úplne ideálne riešenie.. Dík za pomoc. |
||
Kajman Profil |
#2 · Zasláno: 11. 9. 2014, 12:39:59
WHERE '2012-10-13'>=`from` AND ('2012-10-13'<=`to` OR `to`='0000-00-00') |
||
Icka Profil * |
#3 · Zasláno: 11. 9. 2014, 12:40:48
No nejsem si tim uplne jistej, ale řekl bych že by se to dalo vyřešit takto:
SELECT * FROM `opravy` WHERE '2012-10-13' BETWEEN `from` AND `to` OR ('from' <='2012-10-13' AND 'to' = '0000-00-00 ') |
||
juriad Profil |
#4 · Zasláno: 11. 9. 2014, 12:44:18
Zaprvé. Nemáš tam ukládat 0000-00-00 ale NULL. NULL má význam neexistující hodnoty - prostě nezadáno, kdežto '0000-00-00' je platný datum.
Zadruhé. Není vhodné používat v názvech tabulek a sloupců klíčová slova databáze (from, to, desc). Takto si pořád musíš dávat pozor na escapování i u ručních dotazů. Ale budiž. SELECT * FROM `opravy` WHERE '2012-10-13' >= `from` AND (`to` = '0000-00-00' OR `to` >= '2012-10-13') |
||
John Doe Profil * |
#5 · Zasláno: 11. 9. 2014, 12:58:16 · Upravil/a: John Doe
vďaka, o dosť jednoduchšie ako môj pripravovaný Case
juriad, vďaka za pripomienky, zapracujem na týchto chybách. |
||
Časová prodleva: 10 let
|
0