Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Matrix ausgaben

Einklappen

Neue Werbung 2019

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

  • SQL Matrix ausgaben

    Hallo

    Ich versuche eine Matrix abfrage zu machen. Ich habe die https://php-de.github.io/jumpto/gruppenbruch/ Gruppenbruch gesehen das müsste sowas sein aber ich kann nicht alles zusammen fügen.
    Unten habe ich das ganze in eine mal als bild dargestellt.


    PHP-Code:
    $sql "SELECT screw_thread,screw_length,screw_hpn FROM gew_screw";
    foreach(
    $mysql->query($sql) as $row){
        
    $test[] = array($row['screw_thread'],$row['screw_length'],$row['screw_hpn']);
      }

    echo 
    "<table>";
    for (
    $row 0$row count($test); $row++) {
    echo 
    "<tr>";
      for (
    $col 0$col 16$col++) {
        echo 
    "<td>".$test[$col][$row]."</td>";
      }
    echo 
    "</tr>";
    }
    echo 
    "</table>"

    Screenshot_20200404_230107.png

  • #2
    Die Daten der Datenbank und Struktur müssen wir uns dann wohl ausdenken oder gibst du die auch Preis?

    Kommentar


    • #3
      Also die Daten in der Datenbank sind alle Schrauben in verschiedenen Größen(M6 M8 M10 ....) M6 = metrisches Gewinde 6mm
      Die Schraube sind aber auch verschieden lang. 10mm 15mm 20mm 25mm usw

      screw_thread = Schraube Größe
      screw_length = Schrauben Länge
      screw_hpn = ist die Teile Nummer z.b. im SAP



      screw_thread solte in Zeilen Richtung sich aufreihen.
      und
      screw_length solte in Spalten Richtung sich aufreihen.
      und dort wo sich die Punkte treffen sollte die screw_hpn erscheinen falls es eine gibt

      Kommentar


      • #4
        Das nennt sich PIVOT Abfrage. Mit dem Begriff findest du bei Google genügend Ansätze.

        Kommentar


        • #5
          Dazu noch ein Hinweis, "Gruppenbruch" und PIVOT Abfrage sind unterschiedliche Welten. Beides ist möglich, das erste funktioniert über den Client (PHP), das zweite kann direkt von der Datenbank erledigt werden, die dann die fertige Matrix liefert, als sei es eine Tabelle. (Es ist nur eine Abfrage)
          Dabei gibt es verschiedene Spaßfaktoren. Ein relevanter ist die Dynamik der zu verwendenden Ergebnisspalten. Sind die (sehr) konstant, spricht viel für eine Datenbanklösung. (Klassiker: die 12 Monate eines Jahres, die 7 Totsünden, 16 Bundesländer, 4 Quartale und die 13 Apostel)
          Ansonsten muss das Statement nach Bedarf zusammengebaut werden und dann ist man nahe am Gruppenbruch.

          Kommentar


          • #6
            auch hier noch mal vielen dank für die vielen antworten! Ich denke das die abfrage über die SQL PIVOT oder gruppenbuch das richtige ist aber ich habe es leider nicht hin bekommen. Fall mein Project durchstartet würde ich mir noch mal versuchen das anzueignen.

            hier meine lösung
            PHP-Code:
            <?php
            include'./func/POD_sql.php';


            // how many Thread in the SQL
            $sql "SELECT screw_thread,screw_length,screw_hpn FROM gew_screw";
            foreach(
            $mysql->query($sql) as $row)
              {
                
            $threads[] = $row['screw_thread'];
                
            $length[] = $row['screw_length'];
                
            $test2[$row['screw_length']][$row['screw_thread']] = $row['screw_hpn'];
              }


            // Entfernt doppelte Werte aus einem Array
            $length_nod array_values(array_unique($length));
            sort($length_nod); // Sortieren
            $threads_nod array_values(array_unique($threads));
            #sort($threads_nod);


            echo '<div>
            <table width="100%">
            <tr style="background-color:rgb(100, 200, 200);">'
            ;
            for (
            $colh=-1$colh<count($threads_nod); $colh++) {
              echo 
            "<th>".$threads_nod[$colh]."</th>";
            }
            echo 
            "</tr>";

            for (
            $row=0$row<count($length_nod); $row++) {
            echo 
            "<tr><td>$length_nod[$row]</td>";

              for (
            $col=0$col<count($threads_nod); $col++) {
                echo 
            "<td>".$test2[$length_nod[$row]][$threads_nod[$col]]."</td>";
              }

            echo 
            "</tr>";
            }
            ?>
            </table></div>

            Kommentar


            • #7
              Ich sehe in deinem SQL keinen Ansatz zu Pivottabellen.
              Lies noch mal nach zum Beispiel hier: https://modern-sql.com/de/anwendung/pivot

              Kommentar


              • #8
                Zitat von DonRoberto Beitrag anzeigen
                hier meine lösung
                Und das Problem dabei ist? Das sieht von der Logik i.O. aus.

                Was auffällt:
                -$test2[$length_nod[$row]][$threads_nod[$col]] greift u.U. auf undefinierte Werte zu (prüfen ob der Wert existiert)
                -"$colh=-1" -> setz vor die Schleife ein Leeres Feld <th></th> und zähl sauber
                -statt for kannst du foreach nutzen, dürfte übersichtlicher sein

                Kommentar

                Lädt...
                X