Autor | Zpráva | ||
---|---|---|---|
Hanysek01 Profil * |
#1 · Zasláno: 10. 8. 2007, 13:21:10
mám tabulku rezervaci, kde je datum přijezdu (od) datum odjezdu (do) a čislo chaty.
potřeboval bych udělat podminku do sql dotazu, když dam např: od 1.1.2007 do 2.2.2007 aby mi vratil čisla chat, ktere jsou obsazene, tudiž pro ktere se nějake dny z meho dotazu kryjou se dny uloženymy v tabulce (rezervovanymy) přemyšlel sem že obsazena chata bude pokud: datum odjezdu bude v rozmezi "od" - "do" datum přijezdu bude v rozmezi "od" - "do" datum přijezdu i odjezdu bude v rozmezi "od" - "do" datum přijezdu bude před datem "od" a datum odjezdu bude a datem "do" "od" je sloupec v tabulce s datumem přijezdu rezervace a "do" je sloupec s datumem odjezdu v tabulce s rezervacema. tyto sloupce jsou typu "date" ve tvaru yyyy-mm-dd takže date_from1 i date_to1 už mám převedene na tento tvar zkusil sem podle toho sql dotaz napsat, nefunguje ale moc korektně. SELECT cislo_chaty FROM rezervace WHERE ((od >'".$date_from1."') AND (do < '".$date_from1."')) OR ((od >'".$date_to1."') AND (do < '".$date_to1."')) OR ((od >'".$date_from1."') AND (do < '".$date_to1."')) OR ((od <'".$date_from1."') AND (do > '".$date_from1."')) napada někoho v čem by mohla byt chyba? když uložim do tabulky od 2007-08-08 do 2007-10-10 tak mi sql dotaz tenhle zaznam nenajde: SELECT pokoj FROM `rezervace` WHERE `od` >2007-09-09 AND `do`<2007-09-09 msui tam byt `od` >2007-09-09 AND `do`>2007-09-09 proč? děkuji za pomoc |
||
roberta Profil |
#2 · Zasláno: 10. 8. 2007, 13:30:22 · Upravil/a: roberta
proč?
pretože žiadny dátum nie je väčší ako 9.9.2007 a zároveň menší ako 9.9.2007 ale kebyže napíšeš aby bol väčší a rovný ako 9.9.2007 a zároveň menší ako 10.9.2007, tak by to malo fungovať |
||
Hanysek01 Profil * |
#3 · Zasláno: 10. 8. 2007, 13:48:51
proč? pretože žiadny dátum nie je väčší ako 9.9.2007 a zároveň menší ako 9.9.2007 ale kebyže napíšeš aby bol väčší a rovný ako 9.9.2007 a zároveň menší ako 10.9.2007, tak by to malo fungovať ja to 9.9.2007 ale porovnavam s dvěma datumama, v "od" mam uloženo 8.8.2007 a v "do" mam uloženo 10.10.2007 tudiž předpokladam: `od` >2007-09-09 AND `do`>2007-09-09 8.8.2007 > 9.9.2007 a 10.10.2007 < 9.9.2007 tohle pravě nefunguje, nevim proč. |
||
djlj Profil |
#4 · Zasláno: 10. 8. 2007, 13:53:37 · Upravil/a: djlj
Protože to není formát data (nikoli datumu!). Použij 2007-08-08, a to jak pro uložení do databáze, tak i pro porovnání. Jako typ sloupce zvol DATE.
|
||
roberta Profil |
#5 · Zasláno: 10. 8. 2007, 13:54:22
8.8.2007 > 9.9.2007 a 10.10.2007 < 9.9.2007
no a 8.8. je väčšie ako 9.9. a 10.10. je menšie ako 9.9.? |
||
Hanysek01 Profil * |
#6 · Zasláno: 10. 8. 2007, 13:59:13
Protože to není formát data (nikoli datumu!). Použij 2007-08-08, a to jak pro uložení do databáze, tak i pro porovnání. Jako typ sloupce zvol DATE.
samo 6e mam typ sloupce date, mam v něm 2007-08-08 a 2007-10-10 a porovnavam s 2007-09-09 a 2007-09-09 8.8.2007 > 9.9.2007 a 10.10.2007 < 9.9.2007 no a 8.8. je väčšie ako 9.9. a 10.10. je menšie ako 9.9.? i když napišu where `od`<2007-09-09 AND `do`<2007-09-09 pořad mi to ten zaznam kde: od = 2007-08-08 do = 2007-10-10 nevybere. |
||
roberta Profil |
#7 · Zasláno: 10. 8. 2007, 14:05:30
teraz si napísal podmienku, že 8.8. je menej ako 9.9. a zaroven 10.10. je menej ako 9.9.
10.10. nie je menej ako 9.9. a preto ti to nenajde nic... |
||
Hanysek01 Profil * |
#8 · Zasláno: 10. 8. 2007, 14:13:38
teraz si napísal podmienku, že 8.8. je menej ako 9.9. a zaroven 10.10. je menej ako 9.9.
10.10. nie je menej ako 9.9. a preto ti to nenajde nic... to by bylo logicke, ale chyba lávky. funguje to pouze když dam where `od`>2007-09-09 AND `do`>2007-09-09 nechapu co mam špatně |
||
Kajman_ Profil * |
#9 · Zasláno: 10. 8. 2007, 14:21:06
1.1.2007-2.2.2007 by mohlo jít takto
select distinct pokoj from rezervace where (od<='2007-02-02' and do>='2007-01-01') |
||
Hanysek01 Profil * |
#10 · Zasláno: 10. 8. 2007, 14:55:30
1.1.2007-2.2.2007 by mohlo jít takto select distinct pokoj from rezervace where (od<='2007-02-02' and do>='2007-01-01') pořad to nefunguje spravně. ještě jednou to zhrnu: mam uložene ve sloupci "od" (datovy typ date) hodnotu 2007-08-08 a vy sloupci "do" (datovy typ date) hodnotu 2007-10-10 potřebuju dotaz ktery mi vybere ten řadek, pokud se budou některe dny z datumu v dotazu kryt s datumy uloženymy v tabulce. chtěl bych vratit tento zaznam pokud v dotazu bude 7.7.2007 - 9.9.2007, nebo 8.9.2007 - 9.9.2007 nebo 9.9.2007 - 11.11.2007 nebo 7.7.2007 - 11.11.2007. moje řešeni ktere ovšem nefunguje spravně: select distinct pokoj FROM rezervace WHERE ((od <='".$date_to1."') AND (do >= '".$date_to1."')) OR ((od <='".$date_from1."') AND (do >= '".$date_from1."')) OR ((od >='".$date_from1."') AND (do <= '".$date_to1."')) LIMIT 0,30"); |
||
Kajman_ Profil * |
#11 · Zasláno: 10. 8. 2007, 15:09:49
Ještě jednou odpovídám tou samou podmínkou. Už jsem to i zkusil a mně to funguje... jestli on nebude problém mezi židlí a klávesnicí :-)
select distinct pokoj from (select 1 pokoj, date('2007-08-08') od, date('2007-10-10') do ) rezervace where od<='2007-11-11' and do>='2007-07-07' |
||
Časová prodleva: 17 let
|
0