SQL Abfrage - PHP mit SQLite
flownie
- datenbank
Hallo
Ich habe eine PHP Seite mit einer SQLite Datenbank. Darin sind 3 Tabellen:
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
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
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