Ankündigung

Einklappen
Keine Ankündigung bisher.

Matrixabfrage

Einklappen

Neue Werbung 2019

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

  • Matrixabfrage

    Guten Morgen zusammen,

    ich stehe vor folgendem Problem:

    Ich habe 3 Tabellen:
    • mitarbeiter
    • schulungen
    • mitarbeiterschulungen
    Ich benötige jetzt eine Abfrage, mit der ich eine Matrix darstellen kann. Oben alle Schulungen, Links die Mitatrbeiter, die eine Schulung erhalten haben und dazwischen ein X, wenn der Mitarbeiter die Schulung erhalten hat.

    Ist das mit einer Abfrage möglich?

    Mein Ansatz bisher war folgender. Hier habe ich jedoch immer den Mitarbeiternamen und immer mehrfach auch den Schulungsnamen enthalten.

    Code:
    SELECT mitarbeiterschulungen.*, mitarbeiter.ID, mitarbeiter.nachname, schulungen.name FROM mitarbeiterschulungen
    LEFT JOIN mitarbeiter ON mitarbeiterschulungen.mitarbeiterID = mitarbeiter.ID
    LEFT JOIN schulungen ON schulungen.ID = mitarbeiterschulungen.schulungsID
    So sollte es am Ende aussehen:

    Unbenannt.PNG

  • #2
    Das ist prinzipiell möglich, allerdings wirst Du Dir dazu das nötige SQL dynamisch generieren uns dann ausführen müssen. Der Grund ist, daß die Anzahl Spalten im Result von der aktuellen Anzahl der Schulungen abhängt. Falls Du mit PostgreSQL arbeitest: https://www.postgresql.org/docs/11/p...-EXECUTING-DYN
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Hallo,

      meiner Meinung nach ist es nicht möglich, da du ja nicht eine Schulung mit mehreren Mitarbeitern holen kannst. Ein Group By funktioniert für den Fall auch nicht.

      Ich würde es mit deinem Sql-Snippet machen und dann per PHP die Auswertung der geholten Daten.

      Viele Grüße

      Dirk

      Kommentar


      • #4
        Hallo,

        mit MySQL kannst du folgende Pivot Funktion nutzen. Die einzige Möglichkeit die ich gefunden habe, das ganze direkt in MySQL auszuführen, habe ich auch unten angegeben (Die Abfragen musst du allerdings noch anpassen):

        Pivoting in MariaDB: https://mariadb.com/kb/en/library/pivoting-in-mariadb/

        PHP-Code:
        CREATE TEMPORARY TABLE tmp_pivot
        SELECT
          
        `user_permission_matches`.`id`,
          `
        user_permission_matches`.`user_id`,
          `
        users`.`user_name`,
          `
        user_permission_matches`.`permission_id`,
          `
        permissions`.`name`
        FROM
          
        `user_permission_matches`
          
        LEFT JOIN `usersON `user_permission_matches`.`user_id` = `users`.`id`
          
        LEFT JOIN `permissionsON `user_permission_matches`.`permission_id` = `permissions`.`id`
        WHERE
          left
        (`users`.`user_name`, 1) = 'a';

        CALL Pivot('tmp_pivot''name''user_name''id''''');

        SELECT @stmt2;

        PREPARE stmtx FROM @stmt2;

        EXECUTE stmtx;

        DROP TEMPORARY TABLE tmp_pivot

        Kommentar

        Lädt...
        X