Ankündigung

Einklappen
Keine Ankündigung bisher.

Spalten verbinden !?

Einklappen

Neue Werbung 2019

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

  • Spalten verbinden !?

    hallo,

    ich kann meine frage leider nicht richtig beschreiben, darum probiere ich sie zu beschreiben

    also...

    ich habe eine tabelle mit 5 spalten (mitarbeiter,name,vorname,standort, projekte). ein mitarbeiter kann mehrer projekte haben, somit sind die ersten 4 spalten alle gelich und die 5te ändert sich nur, weil dort das andere projekt drin steht.

    grafische sicht:

    mitarbeiter | name | vorname | Standort | projekt
    ----------------------------------------------------------------
    Mitarbeiter1 | Test1 | vname | Deutschland | projekt1
    Mitarbeiter1 | Test1 | vname | Deutschland | projekt2
    Mitarbeiter1 | Test1 | vname | Deutschland | projekt3
    Mitarbeiter1 | Test1 | vname | Deutschland | projekt4

    jetzt möchte ich irgendwie hinbekomme, dass er den mitarbeiter nicht 4x auflistet, sondern nur einmal, aber die projekte beispielweise hintereinander stehen

    Bsp:
    mitarbeiter | name | vorname | Standort | projekt
    ----------------------------------------------------------------
    Mitarbeiter1 | Test1 | vname | Deutschland | projekt1,projekt2...

    oder in einer neuen spalte. ist das irgendwie realisierbar ?

    das problem ist, das es sich um quasi 2 tabellen handelt...siehe abfrage:

    SELECT
    tblMitarbeiter.MitarbeiterID,
    tblMitarbeiter.Mitarbeiter,
    tblMitarbeiter.Name,
    tblMitarbeiter.Vorname,
    tblMitarbeiter.Schreibrechte,
    tblMitarbeiter.Standort,
    tblProjekt.Projekt
    FROM tblMitarbeiter
    LEFT JOIN tblMitarbeiterProjekt ON tblMitarbeiter.MitarbeiterID = tblMitarbeiterProjekt.MitarbeiterID
    LEFT JOIN tblProjekt ON tblMitarbeiterProjekt.ProjektID = tblProjekt.ProjektID ORDER BY Mitarbeiter

    BITTE UM HILFE
    p.s. benutze ich DISTINCT, dann ist zwar nur ein mitarbeiter sichtbar, jedoch auch nur mit einem projekt.

  • #2
    http://goo.gl/izqt4

    Kommentar


    • #3
      der artikel existiert nicht mehr @tr0y

      Kommentar


      • #4
        nu aber.

        Kommentar


        • #5
          @tr0y

          habe mir alles mal durchgelesen und sehr interessant...aber die Lösung ist leider nicht aufgeführt..
          ich habe auch 2 tabellen. eine mit mitarbeiter und eine mit projekte.
          so kann ich jedem mitarbeiter viele projekte zuweisen, aber für die ausgabe sieht es hässlich aus, da ja in der tabelle dann der mitarbeiter mehrfach aufgelistet wird, nur das projekt anders ist... wie ist das umsetzbar !?

          Kommentar


          • #6
            Entsprechend sortieren und nur einmal den Mitarbeiter ausgeben und dann in der Projektspalte entsprechend die Projekte ( per Zeile ) ?

            Ist eher nen Ausgabeproblem, als nen SELECT-Problem.

            Kommentar


            • #7
              Ja genau...

              Die Ausgabe ist das Problem. Aber da die ausgabe dynamisch ist, ist es da überhaupt möglich ?

              hier mal mein Q-Code, hoffe ist minimal übersichtlich.

              $ausgabe="<table id ='ausgabe_tbl' border='0' summary='Ausgabetabelle'>";
              $ausgabe.="<tr><th>Mitarbeiter<a href='drucken.php?page=mitarbeiter_drucken'><img src='icons/print.gif' align='left' title='Zur Druckansicht' height='20' width='20'></th><th>Name</th><th>Vorname</th><th>Standort</th><th title='Pool Schreibrecht'>Pool</th><th>Schreibrechte f&uuml;r Projekte</th>";

              while($zeile=mysqli_fetch_assoc($result))
              {
              ausgabe.="<tr style='background-color: ".$zebra."'><td>".$zeile['Mitarbeiter']."</td><td>".$zeile['Name']."</td><td>".$zeile['Vorname']."</td><td>".$zeile['Standort']."</td><td>".$zeile['Schreibrechte']."</td><td>".$zeile['Projekt']."</td>";

              }

              wie kann man das umschreiben ist dann wohl eher die frage
              ist es möglich in eine die projekte duch kommas zu trennen oder hinten durch weitere spalten anzufügen ?

              Kommentar


              • #8
                also so wäre schon super:

                mitarbeiter | name | vorname | Standort | projekt
                ----------------------------------------------------
                Mitarbeiter1 | Test1 | vname | Deutschland | projekt1 | projekt 2 | projekt3 ...

                wie kann ich das umsetzen ? aufgrund des mysqli_fetch_assoc befehls ist das denn machbar ?
                oder müsste ich anders herangehen ?

                Kommentar


                • #9
                  Merk dir halt innerhalb der While die Felder die du "skippen" könntest..

                  PHP-Code:
                  $last false;
                  while ( 
                  $zeile mysqli_fetch_assoc($result) ) {
                     
                  $current $zeile;
                     
                  $project array_pop($current); // projekt holen

                     // $zeile als Datenresource im $ausgabe-String nutzen !! nicht $current!
                     
                  if ( $last == join($current) ) $ausgabe .= ' hier code ohne angabe des mitarbeiters ';
                     else 
                  $ausgabe .= ' hier code mit angabe des mitarbeiters ';
                     
                  $last join($current);

                  Edit: Wenn du beliebig viele Spalten bei den Projekten anlegen willst in der Tabelle musst du zuerst feststellen wieviel projekte es maximal darzustellen gibt und entsprechend die letzten zellen noch colspan'nen ( sowie das header-zellchen "Projekt". Rate ich aber von ab, das ist nur gekitte im Endeffekt. Da lieber eine Feste Zeile aggregieren und als Fließtext oder Fließende Div's ablegen, die blockweise das ganze darstellen ( in ordentlichen proportionen )

                  so ähnlich etwa.

                  Kommentar


                  • #10
                    ich verstehe den code irgendwie nicht. vielleicht habe ich auch mein problem falsch beschrieben.

                    ich möchte nur solch eine ausgabe haben:

                    mitarbeiter | name | vorname | Standort | projekt
                    ----------------------------------------------------
                    Mitarbeiter1 | Test1 | vname | Deutschland | projekt1 | projekt 2 | projekt3 ...


                    er soll mir die projekte in spalten anzeigen und nicht in zeilen wie hier:

                    mitarbeiter | name | vorname | Standort | projekt
                    ----------------------------------------------------------------
                    Mitarbeiter1 | Test1 | vname | Deutschland | projekt1
                    Mitarbeiter1 | Test1 | vname | Deutschland | projekt2
                    Mitarbeiter1 | Test1 | vname | Deutschland | projekt3
                    Mitarbeiter1 | Test1 | vname | Deutschland | projekt4


                    die zuordnung undausgabe ist ja praktisch in ordnung, nur bin ich nicht in der lage die projekte in eine zeile zu bekommen, die alle dem mitarbeiter1 gehören.

                    Kommentar


                    • #11
                      Wenn sicher gestellt ist, dass die Projekte-Zeile nicht zu lang ist, dann lässt sich das auch per GROUP_CONCAT lösen.

                      Gruß Jens

                      Kommentar


                      • #12
                        Zitat von Riddler Beitrag anzeigen
                        ich verstehe den code irgendwie nicht. vielleicht habe ich auch mein problem falsch beschrieben.

                        ich möchte nur solch eine ausgabe haben:

                        mitarbeiter | name | vorname | Standort | projekt
                        ----------------------------------------------------
                        Mitarbeiter1 | Test1 | vname | Deutschland | projekt1 | projekt 2 | projekt3 ...
                        Das zerreißt dir die Tabelle

                        5 Felder im Titel
                        4 Felder + X felder ( Projekte ) im Body der Tabelle

                        Du kriegst das nur gebaut indem du entweder:
                        4 Felder + 1 Feld mit colspan der maximalen anzahl an projekte
                        4 Felder + X Felder ( Projekte ) im Body der Tabelle

                        oder:
                        5 Felder im Titel
                        5 Felder im Body ( letztes feld mit eigener Tabelle / Divs für Projekte )

                        oder:
                        4 Felder im Titel
                        5 Felder im Body ( letztes feld enthält komma-separiert die Projekte )

                        Kommentar


                        • #13
                          ja genau das meine ich danke schonmal

                          mein quellcode sieht wie folgt aus:

                          PHP-Code:
                                 $ausgabe="<table id ='ausgabe_tbl' border='0' summary='Ausgabetabelle'>";
                                 
                          $ausgabe.="<tr><th>Mitarbeiter<a href='drucken.php?page=mitarbeiter_drucken'><img src='icons/print.gif' align='left' title='Zur Druckansicht' height='20' width='20'></th><th>Name</th><th>Vorname</th><th>Standort</th><th title='Pool Schreibrecht'>Pool</th><th>Schreibrechte f&uuml;r Projekte</th>";
                                 if(isset(
                          $_SESSION['user']))
                                  {
                                      
                          $ausgabe.="<th><a href='add_error.php?page=add_mitarbeiter'>".$zeile['add']='<img src="icons/add.gif" title="hinzuf&uuml;gen" height="20" width="20"  />'."</a></th></tr>";
                                  }
                                 
                          $i=0;
                                 
                          $color="";
                                 
                          $zebra="";
                                 while(
                          $zeile=mysqli_fetch_assoc($result))
                                      {
                                          if(
                          $i == 0){
                                              
                          $zebra "#CCC";
                                          }
                                          else{
                                              
                          $zebra "FFF";
                                          }
                                          if(
                          $zeile['Schreibrechte']==0){
                                              
                          $zeile['Schreibrechte']="No";
                                              
                          $color="#FF0000";
                                          }
                                          else{
                                              
                          $zeile['Schreibrechte']="Yes";
                                              
                          $color="#00FF00";
                                          }

                                          
                          $ausgabe.="<tr style='background-color: ".$zebra."'><td>".$zeile['Mitarbeiter']."</td><td>".$zeile['Name']."</td><td>".$zeile['Vorname']."</td><td>".$zeile['Standort']."</td><td style='background-color:".$color.";text-align:center;width:2px'>".$zeile['Schreibrechte']."</td><td>".$zeile['Projekt']."</td>";
                                          if(isset(
                          $_SESSION['user']))
                                      {
                                          
                          $ausgabe.="<td><a href='add_error.php?page=delete_mitarbeiter&amp;id=".$zeile['MitarbeiterID']."'>".$zeile['delete']='<img src="icons/delete.gif" title="l&ouml;schen" height="20" width="20"  />'."</a></td><td><a href='add_error.php?page=edit_mitarbeiter&amp;id=".$zeile['MitarbeiterID']."'>".$zeile['edit']='<img src="icons/edit.gif" title="bearbeiten" height="20" width="20"  />'."</a></td></tr>";
                                      }
                                          
                          $i++;
                                      }
                              }
                                 
                          $ausgabe.= "</table>"
                          an welcher stelle müsste ich jetzt colspan anwenden ?

                          Kommentar


                          • #14
                            An mehreren..

                            colspan ist eine eigenschaft des <td>-tags, der besagt über wieviel Spalten ( col = columns ) sich die Zelle erstrecken soll, ergo musst du erstmal eine Sache vor dem While und dem zusammenbauen der Tabelle feststellen:
                            - Wieviele Projekte kommen maximal vor

                            Dann musst du entsprechend das colspan für den kopf der tabelle setzen.
                            Als letzten Schritt musst du dynamisch errechnen wieviel Projekte tatsächlich dargestellt werden und um wieviel ( bis zur maximalen Zahl ) Zellen sie die letzte Zelle ausdehnen soll. ( Bei 8 Projekten maximal ist bei einem einzigen Projekt bei einem Mitarbeiter halt colspan = 7, bei 8 Projekten fällt colspan weg. )

                            Kommentar


                            • #15
                              okay danke... ist wophl der richtige ansatz.
                              ich probier erstmal ein bisschen. danke schonmal, jetzt habe ich schonmal hoffe ich den richtigen ansatz

                              Kommentar

                              Lädt...
                              X