05. maj 2000 - 14:04Der er
18 kommentarer og 1 løsning
sql forspørgsel
Er der nogen af jer der kan hjælpe mig med flg. Jeg skal skrive en forespørgsel i mysql der gør flg: søg efter Undervisere fra et specefikt amt, der er ledig i den pågældne periode
Der er bare et mindre problem. Jeg kan ikke overskue det. Mine tabeller ser ud som flg.:
Tabel Kalender: Kalender_ID int(11) UnderviserID int(11) Dato date Referance varchar(60) OrgID int(11)
Tabel Undervisere: UnderviserID int(11) Amt_ID int(11) Fornavn varchar(50) samt alt det normale stamdata.
Søgningen skal som skrevet list alle de undervisere der ikke er booket fuldtud i den givne periode. Perioden bliver indtastet i en form, der består af to felter: startdato og slutdato. Amt id kommer fra en dropdown boks der inde holder en alle amter i danmark, der har hver sin id. Hvis i skal bruge mere info, skriv til mig !!
Nu er jeg ikke en ørn til de mere specielle ting i MySql, men jeg kan umiddelbart løse den, ved at lave en forespørgsel om alle undervisere i det pågældende amt, og derefter for hver af disse lave en forespørgsel på om de har aftaler i den angivne periode, altså med yderligere et antal forespørgsler. Er det godt nok?
sql="select underviserid,fornavn from undervisere where amt_id=$amt"; $res = mysql_query(sql);
while ($row=mysql_fetch_row($res)) { sql2="select * from kalender where underviserid=$row[0] and dato>=$startdate and dato<=$slutdate"; $res2 = mysql_query(sql2); if (mysql_num_rows($res2)=0) { ehco "$row[1] kan godt<br>": } mysql_free_result($res2); }
Yeps, der mangler enkeltstroffer rundt om '$startdate' og '$slutdate', det skal være ==0 i sammenligningen. Hmm, hvad ellers? Gider du poste din version?
$sql="select UnderviserID,Fornavn from Undervisere where Amt_ID=$amt"; $res = mysql_query($sql); while ($row=mysql_fetch_row($res)) { $sql2="select * from Kalender where UnderviserID=$row[0] and Dato>=$startdate and Dato<=$slutdate"; $res2 = mysql_query($sql2); $row2=mysql_fetch_row($res2); $total= mysql_num_rows($row2); while ($counter < $total) { echo "$row2[$counter] kan godt<br>"; $counter++; } mysql_free_result($res2); } mysql_free_result($res);
Der kommer dog ikke noget resultat ud af denne søgning.
Prøv lige med strofferne omkring datoerne. Hedder dine variabler det samme som mine? Er datoformatet korrekt?
Jeg læste forkert: jeg giver dig - i princippet - dem der kan i hele perioden, og du vil have dem der ikke er fuldt optaget. Jeg skal løbe nu, men vender tilbage!
<? include '../include/db_init.inc'; mysql_connect("$site", "$username", "$password"); @mysql_select_db("$dbName") or die("Unable to select database");
$sql = "select UnderviserID,Fornavn from Undervisere where Amt_ID=1";
$res = mysql_query($sql); while ( $row = mysql_fetch_array($res) ) { $sql2 = "select * from Kalender where UnderviserID=11 and Dato >= '2000-01-10' and Dato <= '2000-04-08'"; $res2 = mysql_query($sql2); $row2 = mysql_fetch_array($res2); $total = mysql_num_rows($res2); while ( $counter < $total ) { echo $row2[$counter]; echo " kan godt<br>"; $counter++; } mysql_free_result($res2); } mysql_free_result($res); ?>
Nu skriver den 6 records ud på skærmen, og det er fint nok for mig. Jeg har dog, indtastet bruger id og til og fra dato ind i selve koden for at kunne teste det. Men som du selv skriver, så er det ikke lige det jeg skal bruge. Hvis man kan lave det hele på en gang ville det jo også være at foretrække.
Ikke spor weird.... Det er jo det du beder den om. Lad os lige vente med det med variablerne til det her virker. Du skal nok nærmere lave indmaden på denne måde (du får de optagede dage ... desværre):
$sql = "select UnderviserID,Fornavn from Undervisere where Amt_ID=1"; $res = mysql_query($sql); while ( $row = mysql_fetch_row($res) ) { $sql2 = "select * from Kalender where UnderviserID=$row[0] and Dato >= '2000-01-10' and Dato <= '2000-04-08'"; $res2 = mysql_query($sql2); while ($row2 = mysql_fetch_row($res2)) { echo "$row[1] er optaget $row2[2]<br>"; } mysql_free_result($res2); } mysql_free_result($res);
Hmm, hvordan får vi de ledige dage? Har du en tabel med de dage, der kan komme på tale, f.eks. fraregnet lørdag, søndag helligdage? Ellers må vi til at regne på datoer.
Men altså: giver ovenstående de rigtige, men optagede, dage?
Der er kke nogen tabel med sådanne information. Den eneste tabel der er med datoer, er kalender tabellen. Jeg har fået at vide at man ikke skal tage højde for noget som helst. Det eneste krav er at den ikke lister undervisere der er fuldt booket i denne peirode. Jeg ved godt at det kan blive et problem med weekender og sådan noget. Pt. skal forespørgslen bare liste dem der er tilrådighed i den intastede periode, og liste dem i en drop downbox længere nede på siden.
Vil du gerne se hvordan det ser ud ??? Der er allered nogle søgninger der !!
Jeg har nu fået den til at gøre det hele lidt mere automatisk. Men som du også selv skrev så skal den jo kun finde de undervisere der ikke er booket 100% i den valgte periode.
Hvordan kan man lave sådan en søgning ?? Jeg ved det ikke lige... så derfor ville det da være rart med bare en smule mere hjælp.
Den nuværende kode står neden for !!
================= CUT HERE ======================
<? include '../include/db_init.inc';
mysql_connect("$site", "$username", "$password"); @mysql_select_db("$dbName") or die("Unable to select database"); $count1=0; $count2=0; $aid = 3;
// Her vælges alle de Undervisere der er knyttet til det valgte amt
$sql = "select UnderviserID from Undervisere where Amt_ID='$aid' order by Amt_ID"; $res = mysql_query($sql); $row = mysql_fetch_array($res); $total1 = mysql_num_rows($res); $uid = $row[UnderviserID]; while( $count1 < $total1 ) {
// Her vælges de Undervisere der matcher med UndeviserID feltet i Kalender tabellen
$sql2 = "select UnderviserID from Kalender where Kalender.UnderviserID='$uid' and Kalender.Dato >= '2000-01-10' and Kalender.Dato <= '2000-04-08'"; $res2 = mysql_query($sql2); $row2 = mysql_fetch_array($res2); $total2 = mysql_num_rows($res2); while ( $count2 < $total2 ) { echo $row2[$count2]; echo " kan godt<br>"; $count2++; } mysql_free_result($res2); $count1++; } mysql_free_result($res); ?>
udskrives 1. Når du har lavet dit udtræk med $sql2, checker du om $total2<$antaldage+1 (Både startdag og slutdag skal jo med). Hvis det er tilfældet, er der ledige dage. Øh, tror jeg nok - men du kan da prøve!
Der er ikke noget problem med de dag... det virker fint. Problemet er at få listet de brugere/undervisere der ikke er booket 100% i deres kalender, altså i Kalender tabellen. Der skal laves en mystisk ting... som jeg ikke lige forsår. Jeg har selv ret travt pt. med at få lavet SMG nye system færdig til i morgen tidlig. Så lidt hjælp med det her er at foretrække !!
det ser da ud til at virke.... jeg mangler dog nogle flere test data, så jeg kan få det rigtig testet.. så jeg håber/ser frem til at det virker når der kommer noget mere materiale i databasen.
Hey Erik.... jeg har lige et mindre problem.... det ser vældig godt ud det der vi har lavet. Der er bare lige et mindre problem med det. Det skal også vise de undervisere der ikke er i kalenderen. Lige nu viser den jo kun de personer der er i selve kalenderen eller sagt på en anden måde..... de der er booket, mindre en 100%. Det er fedt nok, men den mangler som sagt at vise, de undervisere der ikke har nogle planer.
Jaaaah, jamen, hvis de er i tabellen Undervisere, og de ikke har nogen dage i Kalender, så kommer den jo tilbage med 0 rækker, og så vil den sige ok, han kan godt. Hmm, jeg tror ikke rigtigt på det!!!
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.