SQL Abfrage, JOIN-Problem

tr0nix

tr0nix

der-mit-dem-tux-tanzt
Hallo zusammen

Ich bin am tüfteln einer Userverwaltung (siehe Bildattachment). Jetzt möchte ich ein Statement absetzen können, welches mir den User, dessen Primäre Gruppe und die Sekondäre Gruppe anzeigt - am liebsten natürlich mit deren Namen. Aktuell kriege ich es nur hin, dass mir die sekondären Gruppen als Nummern angezeigt werden. Ist es möglich, dies auch noch aufzulösen?

Ich weiss ich könnte theoretisch auch über die usergroups Tabelle mit einem weiteren Attribut regeln, ob die Gruppe primär oder sekondär ist, aber mir gefällts so irgendwie besser (gibt dafür wohl auch mehr Probleme).

Das habe ich bisher:
Code:
select `user_name` as `users`, `grou_name` as `primary`, `ref_group_gid` as `secondary` from `user` 
left join `group` on `user`.`user_gid` = `group`.`grou_gid` 
left join `usergroups` on `user`.`user_uid` = `usergroups`.`ref_user_uid`;

Gibt folgendes aus:
+----------+----------+-----------+
| users | primary | secondary |
+----------+----------+-----------+
| root | root | 1 |
| root | root | 2 |
| root | root | 3 |
| root | root | 4 |
| root | root | 5 |
| root | root | 6 |
| root | root | 7 |
| root | root | 8 |
| root | root | 9 |
| root | root | 12 |
| daemon | other | 2 |
| daemon | other | 4 |
| bin | bin | 3 |
| sys | sys | NULL |
| adm | adm | 3 |
| adm | adm | 7 |
| adm | adm | 8 |
| uucp | uucp | NULL |
| nuucp | nuucp | NULL |
| dladm | sys | NULL |
| smmsp | smmsp | NULL |
| listen | adm | NULL |
...
 

Anhänge

  • model.png
    model.png
    32,7 KB · Aufrufe: 9
Hi tr0nix,

denke man sollte das mit einem zusätzlichen Join etwa so lösen können:

Code:
select distinct user.user_name "users", g1.group_name "primary", g2.group_name "secondary"
from user
left join `group` g1 on (user.user_gid = g1.group_gid)
left join `usergroups` on (user.user_uid = usergroups.ref_user_uid)
left join `group` g2 on (usergroups.ref_group_gid = g2.group_gid)
;

Das Ganze natürlich ungetestet und ohne Garantie ... :D

Grüße
 
Cool danke, ich probiers morgen gleich mal aus :).
 
Chapeau! Hat geklappt!

mysql> select distinct user.user_name "users", g1.grou_name "primary", g2.grou_name "secondary" from user left join `group` g1 on (user.user_gid = g1.grou_gid) left join `usergroups` on (user.user_uid = usergroups.ref_user_uid) left join `group` g2 on (usergroups.ref_group_gid = g2.grou_gid);
+----------+----------+-----------+
| users | primary | secondary |
+----------+----------+-----------+
| root | root | other |
| root | root | bin |
| root | root | sys |
| root | root | adm |
| root | root | uucp |
| root | root | mail |
| root | root | tty |
| root | root | lp |
| root | root | nuucp |
| root | root | daemon |
| daemon | other | bin |
| daemon | other | adm |
| bin | bin | sys |
| sys | sys | NULL |
| adm | adm | sys |
| adm | adm | tty |
| adm | adm | lp |
| uucp | uucp | NULL |
| nuucp | nuucp | NULL |
| dladm | sys | NULL |
| smmsp | smmsp | NULL |
| listen | adm | NULL |
| gdm | gdm | NULL |
| lp | lp | NULL |
| webservd | webservd | NULL |
| postgres | postgres | NULL |
| a378570 | other | NULL |
| mysql | mysql | NULL |
| nobody | nobody | NULL |
| noaccess | noaccess | NULL |
| nobody4 | nogroup | NULL |
+----------+----------+-----------+

Danke vielmals! Jetzt nur noch das SQL fertig verstehen :).
 
Chapeau! Hat geklappt!
Danke vielmals! Jetzt nur noch das SQL fertig verstehen :).

Falls ernst gemeint, g1 und g2 wirken in dem Statement als wären sie zwei getrennte Tabellen in der DB die zufällig den gleichen Inhalt haben. Deshalb kannst du g1 mit der prim. ID und g2 mit der sek. ID verknüpfen. Sollte man sich merken, eines der Standardrezepte in SQL.
 
Prima danke! Ich hab bisher nur mit lowlevel SQL rumgepanscht auf der DB.. hat immer ausgereicht. Aber wollts mal "richtig" gelernt haben.
 

Ähnliche Themen

CentOS 5.8 –SQL Abfrage– HTML wird generiert und daraus müssen mehrere Mails versendet werden

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Windows clients können nicht mehr auf lange laufendes System zugreifen

Rollei Mini Wifi Camcorder

Zurück
Oben