flownie: SQL Abfrage - PHP mit SQLite

Hallo

Ich habe eine PHP Seite mit einer SQLite Datenbank. Darin sind 3 Tabellen:

  • t_users (ID, lastname)
  • t_teams (ID, teamname)
  • t_users_teams (ID, userID, teamID)

In t_users sind Mitarbeiter gespeichert. In t_teams sind Teamnamen und in t_users_teams die Zuweisung von Mitarbeiter zu Teams.

Nun kann natürlich ein Mitarbeiter mehreren Teams zugewiesen sein. Nun möchte ich eine Abfrage generieren, die jeweils eine Datenzeile pro Mitarbeiter ausweist, aber alle zugewiesenen Teams auflistet. Das müsste so aussehen:

lastname         teamname
Mitarbeiter 1    Team 1, Team 2
Mitarbeiter 2    Team 2, Team 4, Team 5
.......................................

Ist das irgendwie möglich? Ich kanns aus Performance Gründen nicht mit 2 Abfragen und Schlaufen lösen.

Danke
Marc

  1. Hallo Marc,

    Ich habe eine PHP Seite mit einer SQLite Datenbank.
    Nun kann natürlich ein Mitarbeiter mehreren Teams zugewiesen sein. Nun möchte ich eine Abfrage generieren, die jeweils eine Datenzeile pro Mitarbeiter ausweist, aber alle zugewiesenen Teams auflistet. Das müsste so aussehen:

    lastname         teamname
    Mitarbeiter 1    Team 1, Team 2
    Mitarbeiter 2    Team 2, Team 4, Team 5
    .......................................

    Ist das irgendwie möglich?

    Ich weiß nicht, ob SQLite eine entsprechende Aggregatsfunktion bietet, die GROUP_CONCAT() von MySQL entspricht. Da müsstest Du im Handbuch nachschauen.

    Ich kanns aus Performance Gründen nicht mit 2 Abfragen und Schlaufen lösen.

    Brauchst Du auch nicht. Eine Abfrage, sortiert nach Mitarbeiter, dann Team und das Durchlaufen des Ergebnisses in einer einzigen Schleife mit der Technik des Gruppenwechsels genügt.

    Freundliche Grüße

    Vinzenz

  2. Hallo Marc,

    Ich habe eine PHP Seite mit einer SQLite Datenbank. Darin sind 3 Tabellen:

    • t_users (ID, lastname)
    • t_teams (ID, teamname)
    • t_users_teams (ID, userID, teamID)

    Nun kann natürlich ein Mitarbeiter mehreren Teams zugewiesen sein. Nun möchte ich eine Abfrage generieren, die jeweils eine Datenzeile pro Mitarbeiter ausweist, aber alle zugewiesenen Teams auflistet. Das müsste so aussehen:

    lastname         teamname
    Mitarbeiter 1    Team 1, Team 2
    Mitarbeiter 2    Team 2, Team 4, Team 5

    Ist das irgendwie möglich?

    Ja, SQLite unterstützt erfreulicherweise GROUP_CONCAT(), siehe http://www.sqlite.org/lang_expr.html (suche nach group_concat mit der Suchefunktion Deines Browsers):

    SELECT  
        u.lastname,  
        GROUP_CONCAT(t.teamname, ", ")  
    FROM  
        t_users u  
    INNER JOIn  
        t_user_teams ut  
    ON  
        u.ID = ut.userID  
    INNER JOIN  
        t_teams t  
    ON  
        ut.teamID = t.ID  
    GROUP BY  
        u.lastname  
    ORDER BY  
        u.lastname  
    
    

    sollte das gewünschte Resultat liefern.

    Freundliche Grüße

    Vinzenz