 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
15.09.2003, 21:58
|
#1
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
schwieriger join
gähn, über dem problem brate ich jetzt auch schon wieder ne zeit.
also ich habe drei tabellen
- eine mit usern und ihren attributen
- eine mit allen möglichen rechten
- eine mit den zuordnungen (wer welche rechte hat)
Jetzt will ich eine Userübersicht machen, wo bei jeden User alle rechte aufgezählt sind.
Das problem ist jetzt nur, dass ja da nicht ein datensatz klar einem anderen zuordnungsfähig ist, sondern einem datensatz werden viele zugeordnet.
Muss ich da dann zwei abfragen machen (das wäre kein problem) oder geht es elegant und schnell mit einer???
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
15.09.2003, 22:10
|
#2
|
|
TP-Veteran
Registriert seit: Oct 2001
Ort: Oberau
|
hmm solche sachen gehen bei mir meistens mit probieren, wenn DAS auch nicht geht hilft Jan, Michael oder LArs
PHP-Code:
SELECT user.name,rechte.* FROM user
INNER JOIN user_rechte ON user.user_id = user_rechte.user_id
INNER JOIN rechte ON rechte.recht_id = user_rechte.recht_id
WHERE [wie auch immer]
ORDER BY user.name ASC
So oder so ähnlich könnte es gehen ...
Alex
Geändert von holunda (16.09.2003 um 13:37 Uhr).
|
|
|
15.09.2003, 23:32
|
#3
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
so jetzt probier ich schon die ganze zeit und stelle google immer wieder neue fragen aber ich komme nicht auf einen grünen zweig.
Hier zwei abfragen die einzeln funktionieren, ineinander verschachtelt aber leider nicht mehr. Das ist also auch nicht die lösung.
könnt ihr damit was anfangen?
PHP-Code:
$abfrage = "SELECT sys_benutzer.benutzer_id, sys_benutzer.benutzer,
sys_benutzer.Nachname, sys_benutzer.Vorname, sys_benutzer.lastlogin,
sys_benutzer.sperrung, sys_benutzer_typ.Typ, sys_benutzer_typ.icon
FROM sys_benutzer, sys_benutzer_typ WHERE
sys_benutzer.typ_id = sys_benutzer_typ.typ_id
AND gruppe = '" . $_SESSION["gruppe"] . "' ORDER BY " . $_SESSION["order_ben"] . "
" . $direction . " LIMIT " . $_SESSION["limit_ben"] . "," . $_SESSION["dsps"];
$ergebnis = sql($abfrage, $con_dbdaten);
while ($daten = mysql_fetch_array($ergebnis,MYSQL_BOTH)) {
echo ($daten[0] . " -
" . $daten[1] . " - " . $daten[2] . " - " . $daten[3] . " - " . $daten[4] . "
- " . $daten[5] . "<br>");
$abfrage = "SELECT sys_module.Modulname FROM sys_module_benutzer,
sys_module WHERE sys_module_benutzer.benutzer_id = '" . $daten[0] . "' AND
sys_module_benutzer.modul_id = sys_module.modul_id";
$ergebnis = sql($abfrage, $con_dbdaten);
while ($daten = mysql_fetch_array($ergebnis,MYSQL_BOTH)) {
echo ($daten[0] . ", ");
}
}
Das wäre echt super!
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
Geändert von TobiasKa (17.09.2003 um 17:46 Uhr).
|
|
|
16.09.2003, 00:35
|
#4
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
kannst du vielleicht kurz die datenstruktur der drei tabellen mal posten? (SK, FK)
dann tut man sich gleich ein wenig leichter
@alex: 
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
16.09.2003, 08:16
|
#5
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
da ist sie:
Code:
#
# Tabellenstruktur für Tabelle `sys_benutzer`
#
CREATE TABLE sys_benutzer (
benutzer_id int(11) NOT NULL auto_increment,
typ_id int(11) NOT NULL default '0',
benutzer text NOT NULL,
passwort text NOT NULL,
email text NOT NULL,
Anrede text NOT NULL,
Vorname text NOT NULL,
Nachname text NOT NULL,
Strasse text NOT NULL,
PLZ text NOT NULL,
Ort text NOT NULL,
Telefon text NOT NULL,
Fax text NOT NULL,
Handy text NOT NULL,
statistiken tinyint(4) NOT NULL default '0',
info_email tinyint(4) NOT NULL default '0',
info_sms tinyint(4) NOT NULL default '0',
menue tinyint(4) NOT NULL default '0',
dsps int(11) NOT NULL default '0',
gruppe text NOT NULL,
sperrung tinyint(4) NOT NULL default '0',
sprache text NOT NULL,
lastlogin datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (benutzer_id,benutzer_id,typ_id)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `sys_benutzer_typ`
#
CREATE TABLE sys_benutzer_typ (
typ_id int(11) NOT NULL auto_increment,
Typ text NOT NULL,
icon text NOT NULL,
PRIMARY KEY (typ_id)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `sys_module`
#
CREATE TABLE sys_module (
modul_id int(11) NOT NULL auto_increment,
Modulname text NOT NULL,
Datei text NOT NULL,
db_name text NOT NULL,
gruppe text NOT NULL,
PRIMARY KEY (modul_id)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `sys_module_benutzer`
#
CREATE TABLE sys_module_benutzer (
modul_id int(11) NOT NULL default '0',
benutzer_id int(11) NOT NULL default '0',
order int(11) NOT NULL default '0',
PRIMARY KEY (modul_id,benutzer_id)
) TYPE=MyISAM;
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
16.09.2003, 10:18
|
#6
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
also tobias, da blick ich nicht ganz durch.
Ich kann ohne Daten nicht erkennen, wo und wie du deine Rechte verwaltest.
Kurz, soweit ich das verstehe:
Users (sys_benutzer) können module (sys_module) aufrufen
Die Beziehung, wer welchen Modulen zugeordnet ist, ist in der sys_module_benutzer geregelt.
Bleibt ansich nur noch der sys_benutzertyp. nur wie oder warum was wo du da die Rechte hast...
da kann ich nur eine 1:n Beziehung zu den benutzern rauslesen.
kann ich dich noch um eine kleine erklärung der Tabellen bzw. vielleicht um demodaten bitten?
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
16.09.2003, 10:24
|
#7
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
die tabelle sys_benutzer_typ hat keinen einfluss auf das rechtesystem. dort wird gespeichert, ob der user admin, gast oder normaler user usw. ist. Um die "usertypen" unkomplizierter umbenennen und erweitern zu können habe ich das in eine extra tabelle gesteckt.
der rest deiner interpretation war richtig 
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
16.09.2003, 10:28
|
#8
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
und wo sind dann da die rechte?
oder geht es nur darum, rauszufinden, welche Module den jeweiligen Usern zugeordnet sind?
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
16.09.2003, 10:42
|
#9
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
genau, die "spezielle" rechteverwaltung ist woanders (da jeder datensatz andere rechte haben kann. Hier geht es nur grundsätzlich um das benutzen der module und ihre reihenfolge im menü (order)
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
16.09.2003, 10:58
|
#10
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
nochmal:
also du willst nur den namen der module haben, die der user verwenden darf?
dann:
select b.benutzer_id, benutzer, m.modul_id modulname from sys_benutzer b,sys_module_benutzer smb,sys_module m
where smb.benutzer_id = b.benutzer_id
and smb.modul_id = m.modul_id
and b.benutzer_id=1
order by smb.order
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
16.09.2003, 11:10
|
#11
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
so jetzt sind wir schon ganz nah dran
so ähnlich habe cih es auch schon mal versucht, das problem ist nur, dass ich das ergebnis gerne etwas anders hätte.
jetzt sieht es so aus
Code:
benutzer_id | benutzer | modulname
------------|---------------|-------------------
1 | administrator | Übersicht
1 | administrator | Benutzer verwalten
1 | administrator | Workflow verwalten
So wäre aber das "musterergebnis"
Code:
benutzer_id | benutzer | modulname
------------|---------------|-------------------
1 | administrator | Übersicht, Benutzer verwalten, Workflow verwalten
geht das überhaupt?
oder müsste ich dann mit php rumspielen dass es so wird?
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
16.09.2003, 11:33
|
#12
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
wird dir wohl ein paar zeilen php nicht ausbleiben. wobei du den select von oben durchaus heranziehen kannst. und in der verarbeitungsschleife auf änderund der userID abprüfst um deine liste zu 'glätten'
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
16.09.2003, 11:37
|
#13
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
ok, schade das das mysql nicht hergibt. Wird das irgentwann man möglcih sein?
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
|
|
|
16.09.2003, 11:42
|
#14
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
ob es mysql hergibt, kann ich dir nicht sagen, weil ich es nicht weiss. dazu bin ich zu 'standard' um alle spezialitäten von mysql zu kennen - man muss ja schliesslich auch auf anderen DB Systemen arbeiten  .
aber ich hab mich schon oft gewundert, was MYSQL nicht alles kann...
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
16.09.2003, 11:52
|
#15
|
|
TP-Insider
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
|
vielleicht kann mir ja noch jemand anderes helfen.  (herzlichen dank longfang)
und warum klappt die "verschachtelte" abfrage nicht?? (siehe oben)
__________________
Gruß
Tobias
Sag einem Klugen einen Fehler, er wird erfreut und dankbar sein.
Ein Dummer sieht dich nur als Quäler und schnappt sofort beleidigt ein.
[Karl Heinz Söhler]
Geändert von TobiasKa (16.09.2003 um 12:14 Uhr).
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 21:16 Uhr.
|
 |