Ergebnis 1 bis 3 von 3

Thema: komplizierte Datenbankabfrage - fortgeschrittenes Problem

  1. #1
    tom2strobl
    Gast

    Standard komplizierte Datenbankabfrage - fortgeschrittenes Problem

    Ich möchte für meine Freizeitgestaltung und mein nächstjähriges Abitur einen Organiser konzipieren, der unter anderem auch eine automatische Ausrechnung der Noten vornimmt. Hier erstmal die relevante Datenbankstruktur:

    # faecher
    - id (prim), name, short, lehrer

    # termine
    - id (prim), date, entrydate, name, desc, fach, geschrieben (1/0), note, gewichtung

    Nun möchte ich eine Schleife machen, dass er alle Fächer abgrast, anschließend von dem jeweiligen Fach alle Termine bei denen es eine Note gibt holt. Soweit so gut. Bloß jetzt stehe ich vor dem Problem: Ich will mir die einzelnen Termin-Noten holen und anschließend einen Durchschnitt berechnen, also alle addieren und durch die Anzahl der Noten dividieren.

    Code:
    $qry = ("SELECT * FROM faecher");
    $rslt = mysql_query($qry) OR die(mysql_error());
    while ($row = mysql_fetch_assoc($rslt)) {
    	$fachid = $row['id'];
    	$name = $row['name'];
    	$lehrer = $row['lehrer'];
    	
    	$qry2 = ("SELECT * FROM termine WHERE fach=$fachid");
    	$rslt2 = mysql_query($qry2) OR die(mysql_error());
    	while ($row2 = mysql_fetch_assoc($rslt2)) {
    		$geschrieben = $row2['geschrieben'];
    		$terminid = $row2['id'];
    		
    		$qry3 = ("SELECT * FROM termine WHERE id=$terminid AND geschrieben='1'");
                            // geschrieben=1 ist das Indiz, dass die Arbeit nicht nur im Kalender steht, sondern auch schon eine Note hat.
    		$rslt3 = mysql_query($qry3) OR die(mysql_error());
    		while ($row3 = mysql_fetch_assoc($rslt3)) {
    		               // Hier muss ich irgendwie das ganze addieren, anzahl ausrechnen und anschließend dividieren
    		}
    	}
    }
    Ich hoffe man konnte verstehen, was ich wollte. Bei Fragen bin ich jederzeit zu haben.

    Herzlichen Dank im Voraus,
    Thomas Strobl
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Meister(in)
    Registriert seit
    05.03.2006
    Alter
    29
    Beiträge
    432
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Re: komplizierte Datenbankabfrage - fortgeschrittenes Proble

    Code:
    $qry = ("SELECT * FROM faecher");
    $rslt = mysql_query($qry) OR die(mysql_error());
    while ($row = mysql_fetch_assoc($rslt)) {
    	$fachid = $row['id'];
    	$name = $row['name'];
    	$lehrer = $row['lehrer'];
    	
    	$qry2 = ("SELECT * FROM termine WHERE fach=$fachid");
    	$rslt2 = mysql_query($qry2) OR die(mysql_error());
    	while ($row2 = mysql_fetch_assoc($rslt2)) {
    		$geschrieben = $row2['geschrieben'];
    		$terminid = $row2['id'];
    		
    		$qry3 = ("SELECT SUM(noten) as notensumme FROM termine WHERE id=$terminid AND geschrieben='1'");
                            // geschrieben=1 ist das Indiz, dass die Arbeit nicht nur im Kalender steht, sondern auch schon eine Note hat.
    		$rslt3 = mysql_query($qry3) OR die(mysql_error());
    		$row3 = mysql_fetch_assoc($rslt3)
                    $schnitt = $row3["notensumme"] / mysql_num_rows($rslt3); 
    	}
    }
    Ungetestet und eher ne Vermutung wie gehen könnte.

  3. #3
    tom2strobl
    Gast

    Standard

    Allergrößten Dank Problem gelöst. das sum(note) war der nötige Schubser. Die Lösung lautet nun wie folgt:
    Code:
    $qry = ("SELECT * FROM faecher"); 
    $rslt = mysql_query($qry) OR die(mysql_error()); 
    while ($row = mysql_fetch_assoc($rslt)) {
      $fachid = $row['id'];
      $name = $row['name'];
      $lehrer = $row['lehrer'];
      echo '<div class="row">';
      echo '<span class="fach">'.$name.'</span>';
      echo '<span class="lehrer">'.$lehrer.'</span>';
      $qry2 = &#40;"SELECT SUM&#40;note&#41; as notensumme FROM termine WHERE fach=$fachid AND geschrieben='1'"&#41;; 
      $row2 = mysql_fetch_array&#40;mysql_query&#40;$qry2&#41;&#41; OR die&#40;mysql_error&#40;&#41;&#41;;
      $qry3 = &#40;"SELECT * FROM termine WHERE fach=$fachid AND geschrieben='1'"&#41;; 
      $rslt3 = mysql_query&#40;$qry3&#41; OR die&#40;mysql_error&#40;&#41;&#41;; 
      $row3 = mysql_fetch_array&#40;$rslt3&#41;;
      
      if&#40;mysql_num_rows&#40;$rslt3&#41;==0&#41;&#123;
        echo '<span class="nogrades">Keine Noten eingetragen.</span>';
      &#125;else&#123;
        $percent = $row2&#91;"notensumme"&#93;/mysql_num_rows&#40;$rslt3&#41;;
        echo '<div class="notenbar">[img]images/bar.jpg[/img]</div>';
        echo '<span class="percent">'.$percent.' %</span>';
    	if&#40;$percent<=50&#41;&#123;$grade='5';&#125;else
    	if&#40;$percent<=65&#41;&#123;$grade='4';&#125;else
    	if&#40;$percent<=80&#41;&#123;$grade='3';&#125;else
    	if&#40;$percent<=90&#41;&#123;$grade='2';&#125;else&#123;$grade='1';&#125;
    	echo '<span class="grade">'.$grade.'</span>';
      &#125;
      echo '</div>';
    &#125;
    Nun ist mir allerdings klar geworden, dass nicht jede Arbeit gleich viel Wert ist, also habe ich eine Gewichtung eingeführt, den Rest habe ich zusammengebracht.

    Das fertige Script schaut nun wie folgt aus:
    Code:
    $qry = &#40;"SELECT * FROM faecher"&#41;; 
    $rslt = mysql_query&#40;$qry&#41; OR die&#40;mysql_error&#40;&#41;&#41;; 
    while &#40;$row = mysql_fetch_assoc&#40;$rslt&#41;&#41; &#123;
      $fachid = $row&#91;'id'&#93;;
      $name = $row&#91;'name'&#93;;
      $lehrer = $row&#91;'lehrer'&#93;;
      echo '<div class="row">';
      echo '<span class="fach">'.$name.'</span>';
      echo '<span class="lehrer">'.$lehrer.'</span>';
      $qry2 = &#40;"SELECT SUM&#40;note*gewichtung/100&#41; as notensumme FROM termine WHERE fach=$fachid AND geschrieben='1'"&#41;; 
      $row2 = mysql_fetch_array&#40;mysql_query&#40;$qry2&#41;&#41; OR die&#40;mysql_error&#40;&#41;&#41;;
      $qry3 = &#40;"SELECT * FROM termine WHERE fach=$fachid AND geschrieben='1'"&#41;; 
      $rslt3 = mysql_query&#40;$qry3&#41; OR die&#40;mysql_error&#40;&#41;&#41;; 
      $row3 = mysql_fetch_array&#40;$rslt3&#41;;
      
      if&#40;mysql_num_rows&#40;$rslt3&#41;==0&#41;&#123;
        echo '<span class="nogrades">Keine Noten eingetragen.</span>';
      &#125;else&#123;
        $percent = $row2&#91;"notensumme"&#93;;
        echo '<div class="notenbar">[img]images/bar.jpg[/img]</div>';
        echo '<span class="percent">'.$percent.' %</span>';
    	if&#40;$percent<=50&#41;&#123;$grade='5';&#125;else
    	if&#40;$percent<=65&#41;&#123;$grade='4';&#125;else
    	if&#40;$percent<=80&#41;&#123;$grade='3';&#125;else
    	if&#40;$percent<=90&#41;&#123;$grade='2';&#125;else&#123;$grade='1';&#125;
    	echo '<span class="grade">'.$grade.'</span>';
      &#125;
      echo '</div>';
    &#125;
    Nochmals danke für die großartige Hilfe und einen duften Tag noch

    Topic kann geclosed werden.

    Mit freundlichen Grüßen,
    Thomas Strobl

Ähnliche Themen

  1. Komplizierte Frage
    Von RedFighter im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 7
    Letzter Beitrag: 09.06.2008, 20:46
  2. Komplizierte Abfrage
    Von Xx Andy xX im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 17
    Letzter Beitrag: 30.04.2008, 23:19
  3. komplizierte angelegenheit
    Von Warthogchief 117 im Forum Forum für Grafiken und Bildbearbeitung
    Antworten: 10
    Letzter Beitrag: 28.09.2007, 20:41
  4. prolog etwas fortgeschrittenes problem
    Von sponnke im Forum Forum für alle anderen Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 12.09.2007, 19:00
  5. komplizierte rechenaufgaben mit java
    Von Masterfredek im Forum Script-Archiv
    Antworten: 0
    Letzter Beitrag: 19.06.2006, 19:37

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •