Avatar billede akki Nybegynder
04. august 2004 - 18:58 Der er 13 kommentarer

hjælp til sql kald..

Jeg er i øjeblikket igang med et projekt på teknisk skole, hvor jeg skal lave et hotel bookings system.

når man har lavet en bookning, bliver der sat en start og en slut dato i en tabel kaldet 'booking'

når man så laver en ny bookning, skal det ikke kunne lade sig gøre at booke et værelse som allerede er booket i en valgt periode.

har fået dette:
SELECT room.roomnr,room.id
FROM room LEFT JOIN booking ON room.id=booking.v_nr AND booking.start >= "27-07-04" AND booking.slut <= "30-07-04"
WHERE booking.v_nr IS NULL

det virker stadig ikke helt..

scriptet virker dog, hvis de to datoer er de samme, altså dem man indtaster, og dem som står i DB, men vælger man feks d. 26-07-04 til den 31-07-04 burde man ikke få nogle værelse, men det gør man ( skal lige siges at der står en bookning fra den 27-07-04 til den 30-07-04 i DB)

håber at der er nogen der kan løse det...
Avatar billede intenz Novice
04. august 2004 - 19:52 #1
En måde at gøre det på, men ikke helt optimalt er at vende datoen om.
så fx. 27-07-04 bliver til 040727. Hvis du bruger det format kan du bruge større og mindre end som du bruger i eksemplet.

= virker fordi det er præcist det samme, men større og mindre end virker ikke fordi du blandet tal og bogstaver sammen (- = bogstav).
Avatar billede intenz Novice
04. august 2004 - 19:53 #2
du skal så lave en funktion der laver 040727 om til en "rigtig" dato, og selvfølgelig den anden vej også.

Men som jeg skrev, ikke helt optimalt :)
Avatar billede akki Nybegynder
04. august 2004 - 19:56 #3
hvordan ville du lave den funktion.
når jeg indsætter det hele i databasen, der kan jeg vel også bare skrive det ind som 270704 istedet for 27-07-04.. ville det´hjælpe..
Avatar billede akki Nybegynder
04. august 2004 - 20:02 #4
har lige prøvet at skrive start dato i db ind sådan "270707" og slut dato "300704"  men det hjalp desværre ikke..

har fået af vide at man måske skal prøve med noget "or"
Avatar billede intenz Novice
04. august 2004 - 20:23 #5
Du skal skrive det den anden vej, det er derfor det er lidt en skod løsning.

040727 og 040730

Med det format vil tallet altid blive større en dagen før, altså 040727 < 040728 < 040729 osv osv.
Når måned og år skifter bliver tallet også større.
Avatar billede akki Nybegynder
04. august 2004 - 20:32 #6
det virker stadig ikke..

har skrevet det sådan i php
...b.start >= '040519' AND b.slut <= '040522' ..

i min DB står der en bookning som hedder start= 040520 slut=040525 men selvom det ikke burde lade sig gøre, for jeg stadig det værelse frem som ellers skulle være booket..
Avatar billede intenz Novice
04. august 2004 - 20:36 #7
skal de ikke være omvendt ?

b.start <= '040519' AND b.slut >= '040522'
Avatar billede intenz Novice
04. august 2004 - 20:39 #8
Jeg er nødt til at løbe, held og lykke med det. Kigger tilbage i morgen
Avatar billede akki Nybegynder
04. august 2004 - 20:51 #9
har prøvet.. det hjalp ikke
Avatar billede dejbjerg Nybegynder
05. august 2004 - 13:15 #10
måske:
SELECT room.roomnr,room.id
FROM room LEFT JOIN booking ON room.id=booking.v_nr AND booking.start >= STR_TO_DATE('27-07-2004','%d.%m.%Y') AND booking.slut <= STR_TO_DATE('31-07-2004','%d.%m.%Y')
WHERE booking.v_nr IS NULL
Avatar billede dejbjerg Nybegynder
05. august 2004 - 13:18 #11
SELECT room.roomnr,room.id
FROM room LEFT JOIN booking ON room.id=booking.v_nr AND booking.start >= STR_TO_DATE('27.07.2004','%d.%m.%Y') AND booking.slut <= STR_TO_DATE('31.07.2004','%d.%m.%Y')
WHERE booking.v_nr IS NULL
Avatar billede dejbjerg Nybegynder
05. august 2004 - 13:36 #12
du kan selvfølgelig bruge - i stedet for .
kræver at din booking.start er en date...
ellers må du STR_TO_DATE den også
Avatar billede dejbjerg Nybegynder
05. august 2004 - 13:39 #13
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester