12. november 2002 - 12:25Der er
4 kommentarer og 1 løsning
Tilføjelse til Select
Jeg har lavet den her select:
SELECT MAX_MEETINGROOM_BOOKED.dateto AS Expr1, MAX_MEETINGROOM_BOOKED.datefrom AS Expr2, MAX_MEETINGROOM.* FROM MAX_MEETINGROOM_BOOKED INNER JOIN MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid WHERE (MAX_MEETINGROOM_BOOKED.datefrom >= '20021111 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021111 23:59') AND (MAX_MEETINGROOM_BOOKED.booked = 0) AND (MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs >= 4) OR (MAX_MEETINGROOM_BOOKED.datefrom >= '20021111 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021111 23:59') AND (MAX_MEETINGROOM_BOOKED.booked = 0) AND (NOT ('20021111 20:45' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND MAX_MEETINGROOM_BOOKED.dateto)) AND (NOT ('20021111 23:30' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND MAX_MEETINGROOM_BOOKED.dateto)) ORDER BY MAX_MEETINGROOM.meetingname, MAX_MEETINGROOM_BOOKED.datefrom
Den finder de mødelokaler der er ledige udfra dato og tidspunkter. Mit problem er at den kun finder de mødelokaler der allerede er booket på et eller andet tidspunkt på dagen. Så hvis ikke lokalet findes i både MAX_MEETINGROOM_BOOKED og MAX_MEETINGROOM så bliver de ikke fundet. Det skal være sådan at hvis lokalet ikke findes i MAX_MEETINGROOM_BOOKED men er i MAX_MEETINGROOM skal den med i resultatet.
Næsten rigtigt. Der er et lokale der ikke kommer med. Det findes i MAX_MEETINGROOM_BOOKED, bare booked en anden dag.
Sådan ser det ud nu:
SELECT MAX_MEETINGROOM_BOOKED.dateto AS Expr1, MAX_MEETINGROOM_BOOKED.datefrom AS Expr2, MAX_MEETINGROOM.* FROM MAX_MEETINGROOM_BOOKED RIGHT OUTER JOIN MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid WHERE (MAX_MEETINGROOM_BOOKED.meetingroomid IS NULL) OR (MAX_MEETINGROOM_BOOKED.datefrom >= '20021111 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021111 23:59') AND (MAX_MEETINGROOM_BOOKED.booked = 0) AND (MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs >= 4) OR (MAX_MEETINGROOM_BOOKED.datefrom >= '20021111 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021111 23:59') AND (MAX_MEETINGROOM_BOOKED.booked = 0) AND (NOT ('20021111 14:00' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND MAX_MEETINGROOM_BOOKED.dateto)) AND (NOT ('20021111 14:15' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND MAX_MEETINGROOM_BOOKED.dateto)) ORDER BY MAX_MEETINGROOM.meetingname, MAX_MEETINGROOM_BOOKED.datefrom
Faktisk virker det slet ikke. Hvis jeg laver en forespørgsel på en dag hvor der ikke er nogen lokaler booked så er mit resultat altid tomt. Min select ser således ud:
SELECT MAX_MEETINGROOM_BOOKED.dateto AS Expr1, MAX_MEETINGROOM_BOOKED.datefrom AS Expr2, MAX_MEETINGROOM.* FROM MAX_MEETINGROOM_BOOKED RIGHT OUTER JOIN MAX_MEETINGROOM ON MAX_MEETINGROOM.id = MAX_MEETINGROOM_BOOKED.meetingroomid WHERE (MAX_MEETINGROOM_BOOKED.meetingroomid IS NULL) OR (MAX_MEETINGROOM_BOOKED.booked = 0) AND (MAX_MEETINGROOM_BOOKED.datefrom >= '20021115 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021115 23:59') AND (MAX_MEETINGROOM.chairs - MAX_MEETINGROOM_BOOKED.bookedchairs >= 4) OR (MAX_MEETINGROOM_BOOKED.booked = 0) AND (MAX_MEETINGROOM_BOOKED.datefrom >= '20021115 00:00') AND (MAX_MEETINGROOM_BOOKED.dateto <= '20021115 23:59') AND (NOT ('20021115 12:00' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND MAX_MEETINGROOM_BOOKED.dateto)) AND (NOT ('20021115 16:00' BETWEEN MAX_MEETINGROOM_BOOKED.datefrom AND MAX_MEETINGROOM_BOOKED.dateto)) ORDER BY MAX_MEETINGROOM.meetingname, MAX_MEETINGROOM_BOOKED.datefrom
Du har jo faktisk svaret på det jeg spurgte om, så pointene skal du jo ha. Tak for hjælpen. Håber også du kan hjælpe med den næste.... :-)
Synes godt om
Ny brugerNybegynder
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.