php und MySql ... Array in Array

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • php und MySql ... Array in Array

    Hallo erstmal,

    Also , ich hab da (natürlich) ein kleines Problem, was euch Profis gewiss lächerlich erscheint.
    Aber ich bin "nur" Flashdesigner.*Ausrede such*

    Also, ich habe eine Datenbank, in der sich Schüler und deren Noten befinden.
    Diese lese ich so aus:
    PHP-Code:
    $rest mysql_query($noten)or die(mysql_error());  
    while (
    $rowe mysql_fetch_assoc$rest ))  
    {  
    $sqlfach1 ="SELECT *FROM notentab WHERE  f_id = 1 AND notentabns_id = '$rowe[s_id]'";  
    $resfach1 mysql_query($sqlfach1);  
    while (
    $rowfach mysql_fetch_assoc ($resfach1))    
    {    
    $noten1array[$rowfach['n_id']]= utf8_encode($rowfach['zensuren']);    

    $mnot1 implode(',',$noten1array);   
    echo 
    "&mathe=$mnot1";  } 
    Nun habe ich leider mehrere Schüler, und dort auch mehrere Zensuren im Fach.

    In diesem Fall sehen die Noten dermaßen aus:
    Schüler 1 = 1.0 , 5.0
    Schüler 2 = 2.0

    Nun muß ich das Ganze so hinkriegen, daß Flash das lesen kann.
    Also erstellte ich den Array ( deshalb auch das & vor der Ausgabevariable)

    Derzeitige Ausgabe: &mathe= 1.0,5.0,2.0

    Leider, wie gesagt, zwei Schüler.

    Wie kann ich nun hinbekommen, daß die Ausgabe

    &mathe= 1.0,5.0|2.0 heisst ?

    Also zuerst die Zensuren von Schüler 1 dann "|" dann Schüler 2.

    Danke schon mal im Vorraus
    Zuletzt geändert von jippie; 12.12.2005, 15:41.

  • #2
    Bin zwar kein Profi, aber ich würd mal sagen, du solltest ne zusätzliche Schleife anhängen. For Each würd ich sagen...

    Also er soll für jeden Schüler den noten-string ausgeben, die mit "," getrennt werden und diese wieder mittels "|" voneinander trennen.

    kann dir den code zwar ned sagen, aber ohne schleife wird da wohl nix gehn denk ich.

    greez
    liquid

    Kommentar


    • #3
      hi

      wie sieht den die datenbank struktur aus?
      wenn die schleife die schüler durchgeht, probiere mal das,
      PHP-Code:
      $temp_1 "&mathe=";  
      $first true;
      $rest mysql_query($noten)or die(mysql_error());  
      while (
      $rowe mysql_fetch_assoc$rest ))  
      {  

      $sqlfach1 ="SELECT *FROM notentab WHERE  f_id = 1 AND notentabns_id = '$rowe[s_id]'";  
      $resfach1 mysql_query($sqlfach1);  
      while (
      $rowfach mysql_fetch_assoc ($resfach1))    
      {    
      $noten1array[$rowfach['n_id']]= utf8_encode($rowfach['zensuren']);    

      $mnot1 implode(',',$noten1array);   

      if(
      $first true)
      {
           
      $temp_1 .= $mnot1;
           
      $first false;
      } else 
      {
           
      $temp_1 .= "|" $mnot1;
      }
      }

      echo 
      $temp_1
      Zuletzt geändert von Rolandbar; 12.12.2005, 19:26.
      Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

      Kommentar


      • #4
        hmmm... das klingt schön, ist aber nur für zwei Schüler ( wenn ich das Skript richtig verstehe)
        Ich werde aber nicht wissen,
        wieviel Schüler dort noch dazukommen, sind nur in diesem Beispiel 2 Schüler.

        Aber danke

        Kommentar


        • #5
          ist aber nur für zwei Schüler ( wenn ich das Skript richtig verstehe)
          genau darum habe ich gefragt wie die datenbank strucktur aussiert,
          zb bei phpmyadmin schaueuen: exportieren, tabelle notentab wählen, nur strucktur.

          normal müsst es für unendlich viele schüler sein wenn die While schreiffe die schüler durchgeht, was ich aber ohne die datenbank strucktur nicht sagen kann.

          mfg Roland
          Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

          Kommentar


          • #6
            Also die Tabelle notentab beinhaltet die Spalten ns_id (= schueler.s_id = id des Schülers),
            f_id (= faechername wird dorther geholt), und den "zensuren".

            Würde das Fach auch gern dynamisch durchlaufen lassen, damit da noch ein Fach dazukommen könnte, aber für den Anfang reicht es so.

            Die Tabelle notentab wird dann vom Lehrer ausgefüllt.

            $rowe[s_id] = die Id des jeweiligen Schülers.

            Ich bin grad dabei zu probieren, das ganze per foreach zu lösen.
            Leider funktioniert das auch noch nicht so, wie ich es möchte, bin also für Antworten dankbar.

            jippie

            Kommentar


            • #7
              1: mit notentabns_id = '$rowe[s_id] hollst du ja ber nur einen besteimmten schüler, also nur die noten(fächer) von einem schüler und nicht zwei oder mehr, wenn ich das richtig verstanden habe.


              2: mein forschlag:
              folgende struktur finde ich gut

              id int(11) auto_inclement primärschlüssel
              s_id int(11)
              fach varchar(50)
              noten text


              bei noten kommen die noten zum jeweiligen fach.
              s_id ist die schüler id und id ist für den index damit man mal nur einen bestimte zeile holen kann... zb;

              id s_id fach noten
              -----------------------------------------
              1 3 Mathe 1.0,2.0.5.5,4.5
              2 3 Deutsch 6.0,6.0,6.0,6.0
              3 8 mathe 1.0,1.0,1.0

              dann kanst du nur ein bestimmtes fach oder einbestiemten schüler
              und und und wählen.
              meinst du das so in etwa?
              Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

              Kommentar


              • #8
                So sieht das ganze Script aus:
                PHP-Code:
                <?     require ("config.inc.local.php");   
                $schueler = "    SELECT * FROM schueler   
                INNER JOIN klasse ON (klasse.k_id = schueler.sklassen_id)    
                INNER JOIN mitteilung ON (mitteilung.s_id = schueler.s_id)     
                WHERE         klasse.kname = '$klid'  
                 AND           schueler.slehrer_id = '$lid'  
                 AND       klasse.schulename = '$schname'     ";      

                $res = mysql_query($schueler)or die(mysql_error());   
                while ($row = mysql_fetch_assoc( $res ))   
                {
                $nachnamearray[$row['s_id']]= utf8_encode($row['snachname']);
                vornamearray[$row['s_id']]= utf8_encode($row['svorname']);
                $mitteilarray[$row['s_id']]= utf8_encode($row['privat']); 
                $nachnamenk  = implode(',', $nachnamearray);   
                echo "&schulername=$nachnamenk";     
                $vornamenk  = implode(',', $vornamearray);   
                echo "&schulervname=$vornamenk";     
                $mitteil = implode('|',$mitteilarray);   
                echo "&mitteilung=$mitteil";       
                {   // alle Noteneinträge zum übergebenen Fach $f_id ermitteln   
                $sql="SELECT * FROM notentab WHERE f_id=1 
                AND ns_id='$row[s_id]'";   
                $resnoten = mysql_query($sql);      
                $note=ARRAY();   
                //Array aufbauen mit der Schüler-ID als Index   
                while ($rownoten = mysql_fetch_assoc($resnoten))        
                {         
                 //gibts den Index für diesen Schüler schon? Dann weitere Noten anhängen   
                if (isset($note[$rownoten['ns_id']])) 
                $note[$rownoten['ns_id']].=$rownoten['zensuren'].',';    
                 // sonst Index für den Schüler anlegen und Note übernehmen     
                else $note[$rownoten['ns_id']]=$rownoten['zensuren'].',';   
                }   
                //echo ausgabe und Aufbau des Arrays  
                 foreach ($note AS $key=>$val)   
                {      
                echo "&note[$key]=$val";   
                $notenarray= implode ('|',$note);   
                echo "&manoten=$notenarray";   
                }   // alle Noteneinträge zum übergebenen Fach $f_id ermitteln   
                $sqld="SELECT * FROM notentab WHERE f_id=2 AND ns_id='$row[s_id]'";   

                $resnotend = mysql_query($sqld);      

                $noted=ARRAY();   
                //Array aufbauen mit der Schüler-ID als Index   
                while ($rownotend = mysql_fetch_assoc($resnotend))        
                {
                if (isset($noted[$rownotend['ns_id']])) 
                $noted[$rownotend['ns_id']].=$rownotend['zensuren'].',';     
                else $noted[$rownotend['ns_id']]=$rownotend['zensuren'].',';   
                }   
                   foreach ($noted AS $key=>$val)  
                 {      
                echo "&noted[$key]=$val";   
                $notenarrayd= implode ('|',$noted);   
                echo "&deutschnoten=$notenarrayd";   }   }   }   ?>
                Soweit bin ich nun "schon".

                Also, ich schicke per Flash die Schule,Klasse und den Lehrer.

                Nun soll mir php einen Array herstellen, mit den Noten (im jeweiligen Fach: f_id) nur von den Schüler aus der Klasse.

                also manoten = zensuren schüler1|zensuren schüler2|usw.

                Beispiel:
                Schüler 1 hat in Mathe die Noten : 1.0,5.0
                Schüler 2 hat in Mathe die Noten : 3.0,4.0,1.0
                Schüler 3 hat in Mathe die Noten: 2.0

                Ausgabe (gewünscht) : manoten=1.0,5.0|3.0,4.0,1.0|2.0

                Funktioniert im Moment nicht,

                derzeitige Ausgabe:
                PHP-Code:
                manoten=1.0,5.0  manoten3.0,4.0,1.0  manoten2.0 
                Zuletzt geändert von jippie; 13.12.2005, 20:25.

                Kommentar


                • #9
                  Kannst Du deinen Beitrag mal bitte editieren und den Code mithilfe des vB Code darstellen? Das macht das ganze einfacher zu lesen, danke.
                  Du könntest ausserdem auch schon vieles mit einem SQL - Statement erleichtern. Stichwort: GROUP BY

                  Kommentar


                  • #10
                    also das was ich beim ersten post in den php tags geschieben habe müsst eigenlich geanu das machen was du willst.

                    mfg Roland
                    Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

                    Kommentar


                    • #11
                      PHP-Code:
                      <? 

                      require ("config.inc.local.php"); 
                      $schueler = "  
                      SELECT * FROM schueler 
                      INNER JOIN klasse ON (klasse.k_id = schueler.sklassen_id)  
                      INNER JOIN mitteilung ON (mitteilung.s_id = schueler.s_id) 

                      WHERE   
                          klasse.kname = '$klid' 
                      AND 
                              schueler.slehrer_id = '$lid' 
                      AND 
                          klasse.schulename = '$schname' 

                      "; 


                      $res = mysql_query($schueler)or die(mysql_error()); 
                      while ($row = mysql_fetch_assoc( $res )) 
                      {
                      $nachnamearray[$row['s_id']]= utf8_encode($row['snachname']); 
                      $vornamearray[$row['s_id']]= utf8_encode($row['svorname']); 
                      $mitteilarray[$row['s_id']]= utf8_encode($row['privat']); 


                      $nachnamenk  = implode(',', $nachnamearray); 
                      echo "&schulername=$nachnamenk"; 

                      $vornamenk  = implode(',', $vornamearray); 
                      echo "&schulervname=$vornamenk"; 

                      $mitteil = implode('|',$mitteilarray); 
                      echo "&mitteilung=$mitteil"; 



                      $temp_1 = "&mathe=";  
                      $first = true;


                      $sqlfach1 ="SELECT * FROM notentab WHERE f_id=1 AND ns_id ='$row[s_id]'";  
                      $resfach1 = mysql_query($sqlfach1);  
                      while ($rowfach = mysql_fetch_assoc ($resfach1))    
                      {    
                      $noten1array[$rowfach['ns_id']]= utf8_encode($rowfach['zensuren']);    

                      $mnot1 = implode(',',$noten1array);   

                      if($first = true)
                      {
                           $temp_1 .= $mnot1;
                           $first = false;
                      } else 
                      {
                           $temp_1 .= "|" .$mnot1;
                      }
                      }
                      echo "manoten=$temp_1";
                      }
                      so wird "manoten=&mathe=5.0,1.05.0,5.05.0,3.05.0,4.05.0,2.0 " ausgegeben.

                      Ich glaub, ich steh nun völlig auf dem Schlauch*grummel

                      Kommentar

                      Lädt...
                      X