2017-02-24 1 views
2

Ich habe eine Viele-zu-viele-Beziehung zwischen Benutzer und Rolle in meiner MySQL-Datenbank. Daher habe ich eine Mapping-Tabelle, die die IDs beider Tabellen verbindet. Die Mapping-Tabelle sieht wie folgt aus:Wie zeige ich den Namen eines Benutzers in seiner Zuordnungstabelle anstelle seiner ID an?

ID of User | ID of Role 
---------- | ---------- 
1   | 1 
1   | 2 
2   | 1 
2   | 3 

Benutzer-Tabelle:

Firstname of User | ID of User 
----------------- | ---------- 
ExampleUser1  | 1 
ExampleUser2  | 2 

Rollentisch:

Name of Role  | ID of Role 
----------------- | ---------------- 
ExampleRole1  | 1 
ExampleRole2  | 2 
ExampleRole3  | 3 

und ich möchte, dass meine Mapping- Tabelle so aussehen:

Firstname of User | Name of Role 
----------------- | ------------ 
ExampleUser1  | ExampleRole1 
ExampleUser1  | ExampleRole2 
ExampleUser2  | ExampleRole1 
ExampleUser2  | ExampleRole3 

Was ist die SQL-Abfrage, um das zu realisieren?

Antwort

2

Sie können dies erreichen mit Verknüpfungen

select user.user_name, roles.role_name from mapping_table 
inner join user on user.id = mapping_table.user_id 
inner join roles on role.id = mapping_table.role.id 
+0

aber meine Mapping-Tabelle hat nur die ID von Benutzer und Rolle, so dass Benutzername oder Rollenname nicht funktioniert –

+0

Name des Benutzers und der Rolle werden Benutzer und Rolle Tabelle jeweils vorhanden sein. Ich habe den Code für Sie aktualisiert, bitte ändern Sie den Feldnamen entsprechend –

+0

ja, das ist es! vielen Dank –

2

Sie müssen alle drei Tabellen verbinden, und die Mapping-Tabellen verwenden IDs mit Namen ersetzen:

SELECT u.name, r.name 
FROM user u 
JOIN user_role ur ON u.id = ur.user_id 
JOIN role r ON r.id = ur.role_id 
+1

danken Ihnen für Ihr Feedback! –

Verwandte Themen