Ankündigung

Einklappen
Keine Ankündigung bisher.

Matrixabfrage

Einklappen

Neue Werbung 2019

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

  • truemaster
    hat ein Thema erstellt Matrixabfrage.

    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

  • phpCrow
    antwortet
    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

    Einen Kommentar schreiben:


  • BLU
    antwortet
    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

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X