Avatar billede torpmikkelsen Juniormester
06. maj 2007 - 10:43 Der er 8 kommentarer og
1 løsning

Select statement til bookingcalendar

Hej Exp

Jeg er igang med at lille bookingsystem. Jeg har på nuværende tidspunkt følgende tabeller i min database:

staff(indeholder medarbejdere)
staffId - phone - email

functions (indeholder jobfunktioner)
functionId - functionDescription

staffFunction (tilknytter medarbejdere til div. jobfunktioner)
staffFunctionId - staffId - functionId

og til sidst en kalender

bookingCalendar (tilknytter medarbejdere til div. datoer)
bookingId - staffId - functionId - date

-----------

Selve brugerfladen består så af et kalender-modul hvor man kan vælge en dato, og derefter en jobfunktion fra en selectbox og så skal der i et "GridView" vises hvilke medarbejdere der er ledige.

Er der nogen der kan hjælpe mig med et selectstatement til det.

Mit eget ser således ud:
SELECT        staffId, date
FROM            bookingCalendar
WHERE        (date <> @selectedDate)

Jeg kobler den selvføgelig sammen med staff tabellen med JOINS.
Men problemet er, at hvis medarbejder "1" er booket på den dato man har valgt, men også er booket på en anden dato, vil han jo alligevel stå på listen.

Hvordan skal mit select statement se ud?
Avatar billede neoman Novice
06. maj 2007 - 11:51 #1
SELECT staff.Name
FROM staff
WHERE (((staff.staffId) NON IN (SELECT staffId FROM bookingCalendar WHERE date=?)));

Det gælder jo om at finde ud af hvem ER booket i calenderen på en given dag - det er subqueryen, og når de er booket den dag, så skal deres navn IKKE findes fra staff  (=NOT IN) - og denne select synes at kunne gøre det.
Avatar billede neoman Novice
06. maj 2007 - 11:52 #2
Hvis dette fungerer, så kan vi tage Step 2 - at kigge på funktionsbeskrivelserne:)
Avatar billede neoman Novice
06. maj 2007 - 11:52 #3
og "NON IN" skulle være "NOT IN" i SELECT'en !
Avatar billede torpmikkelsen Juniormester
06. maj 2007 - 12:03 #4
hahaha... yes sir! Det virker, pisse fedt!

Kan du koble de andre ting sammen også, med join osv.? Du kender jo opgaven ;o)
Avatar billede torpmikkelsen Juniormester
06. maj 2007 - 12:09 #5
du kan lige smide et svar i den tidligere tråd, så får du dine points derfra.
Avatar billede neoman Novice
06. maj 2007 - 12:15 #6
Ja prøver lige med denne her:
SELECT staff.Name
FROM staff INNER JOIN staffFunctions ON staff.staffID = staffFunctions.staffID
WHERE (((staff.staffID) Not In (SELECT staffid FROM calendar WHERE date=?)) AND ((staffFunctions.functionID)=[?]));

Det,der sker her er som følger : Vi finder hvilke staffID er booket på en given dato (subqueryen) - og det er ligemeget med hvilken stafffunction de er booket - når de er booket så er de jo booket. 

Fra staff finder vi så alle dem der ikke er booket på den pågældende dag. Så kommer vores join in her - for vi ønsker kun at finde dem som har en given funktion - og den hægter vi så direkte på staff-listen ved at plukke kun dem som har den ønskede functionID - tror jeg nok, hehe:)
Avatar billede neoman Novice
06. maj 2007 - 12:22 #7
og med 2 selects kunne det ser sådan her ud - og er nemmere at forstå:
SELECT Staff.Name
FROM Staff
WHERE (((Staff.staffID) Not In (SELECT staffid FROM calendar WHERE date=?)) AND ((Staff.staffID) In (SELECT staffID FROM staffFunctions WHERE functionID=?)));
Avatar billede torpmikkelsen Juniormester
06. maj 2007 - 12:43 #8
Det virker kraftedeme!

Det er fandeme sejt! Tak!

Smid et svar så får du point!
Avatar billede neoman Novice
06. maj 2007 - 12:46 #9
svar:)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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