MySQL Abfrage über mehrere Tabellen, mit ua. lehrem Ergebnis
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
all
anschauen
ausgegeben all
bekommen
code
datenbank
eintrag
eintragen
ergebnis
fehler
linken tabelle
not
null
problem
rechte tabelle
tabelle
url
vorkommen
zeile
-
Hallo ihr lieben Lima-City User.
Ich habe follgendes Problem mit MySQL: Ich habe zwei Tabellen. Eine mwl_user und eine mwl_rights. Nun mache ich eine Abfrage um aus der Datenbank mwl_user die User-ID und den Passworthash auszulesen und gleichzeitig mit dieser ID die Rechte des Users aus mwl_rights zu bekommen.
Bis hierhin funktioniert alles ohne Probleme. Nun gibt es aber auch User zu denen kein Eintrag in der mwl_rights existiert. Wenn das der Fall ist, bekomme ich von meiner Abfrage aber überhaupt nichts zurück.
Wie schaffe ich es nun, wenn der User in der mwl_rights Tabelle eingetragen ist, seine Rechte und seinen PW Hash und wenn er nur in der User Datenbank steht nur seinen Hash zu bekommen?
Mein Code sieht im Moment so aus:
SELECT u.user_pw, ur.user_right FROM mwl_user u, mwl_rights ur WHERE u.user_name = ? AND ur.user_id = u.user_id
Vielen Dank für alle Antworten schonmal im Forraus! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Setze mal für die Rechte einen Default Wert, der kann ja auch leer sein. Aber so hast du immer einen Wert drin stehen und bekommst dann auch ein Ergebnis zurück.
-
Wenn ich dich richtig verstehe soll ich einfach immer eine Zeile in die Rechte-Tabelle eintragen, und wenn der User keine Rechte hat ist diese Zeile lehr.
Dann könnte ich aber auch einfach ein Feld zur user Tabelle hinzufügen. Es ist nur so, dass das bei 1000 Usern und 80 - 90 Usern mit Berechtigungen nicht besonders effektiv ist. -
z.B.:
user_rechte varchar(250) NOT NULL default ''
So muss die Tabelle aufgebaut sein. So hast du einen default Wert und so mit auch immer ein Ergebnis. Lässt du das default weg, dann ist die Tabelle leer bei einem neuen Eintrag und dann ist es klar, wenn du zu keinem Ergebnis kommst.
Und dann solltest du dir vielleicht nochmal ein Tutorial über Joins anschauen. So verknüpft man in der Regel Abfragen über zwei Tabellen. -
Teste einmal diese Abfrage:
abgeleitet vonSELECT mwl_user.user_pw, mwl_rights.user_right FROM mwl_user Left join mwl_rights on u.user_id=ur.user_id
Ist für die rechte Tabelle im ON- oder USING-Teil eines LEFT JOIN kein passender Datensatz vorhanden, dann wird für die rechte Tabelle ein Datensatz verwendet, bei dem alle Spalten auf NULL gesetzt sind. Sie können diesen Umstand nutzen, um Datensätze in einer Tabelle zu finden, die kein Gegenstück in einer anderen Tabelle aufweisen:
mit SQLite (ja ich weis <> MySQL) getestet, da hat es funktioniert. Die Daten der linken Tabelle mwl_user werden mind. 1 Mal bei mehreren Vorkommen in mwl_rights für jedes Vorkommen in mwl_rights ausgegeben.
SELECT table1.* FROM table1
LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.id IS NULL;
Dieses Beispiel findet alle Datensätze in table1 mit einem id-Wert, der nicht in table2 vorhanden ist (d. h. alle Datensätze in table1 ohne entsprechenden Datensatz in table2). Dies setzt voraus, dass table2.id als NOT NULL deklariert wurde.
Quelle: http://dev.mysql.com/doc/refman/5.1/de/join.html
@all-in1: warum eine Tabelle unnötig aufblähen?
Beitrag zuletzt geändert: 27.1.2013 17:53:26 von autobert -
ist doch nicht unnötig aufgebläht. Man vermeidet so unnötige Fehler und manchmal auch unnötige DB Inserts.
-
all-in1 schrieb:
doch dies erzeugt pro mwl_user dem noch keine Rechte eingeräumt wurden einen unnötigen DS.
ist doch nicht unnötig aufgebläht. Man vermeidet so unnötige Fehler und manchmal auch unnötige DB Inserts.
Zu den unnötigen Fehlern:all-in1 schrieb:
Ist wie ich demonstriert habe inkl. der richtigen Lektüre (und ergooglen dieser) innerhalb von 15 Min. für einen absoluten MySQL-Anfänger machbar, logisches Denkvermögen vorausgesetzt.
Und dann solltest du dir vielleicht nochmal ein Tutorial über Joins anschauen.
Beitrag zuletzt geändert: 28.1.2013 18:27:19 von autobert -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage