Autor Zpráva
John Doe
Profil *
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
WHERE '2012-10-13'>=`from` AND ('2012-10-13'<=`to` OR `to`='0000-00-00')
Icka
Profil *
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
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 *
vďaka, o dosť jednoduchšie ako môj pripravovaný Case


juriad, vďaka za pripomienky, zapracujem na týchto chybách.

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: