kostenloser Webspace werbefrei: lima-city


MySQL Abfrage über mehrere Tabellen, mit ua. lehrem Ergebnis

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    makawa

    makawa hat kostenlosen Webspace.

    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!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. Autor dieses Themas

    makawa

    makawa hat kostenlosen Webspace.

    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.
  5. 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.
  6. Teste einmal diese Abfrage:
    SELECT mwl_user.user_pw, mwl_rights.user_right FROM mwl_user Left join mwl_rights on u.user_id=ur.user_id
    abgeleitet von
    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:

    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
    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.

    @all-in1: warum eine Tabelle unnötig aufblähen?

    Beitrag zuletzt geändert: 27.1.2013 17:53:26 von autobert
  7. ist doch nicht unnötig aufgebläht. Man vermeidet so unnötige Fehler und manchmal auch unnötige DB Inserts.
  8. all-in1 schrieb:
    ist doch nicht unnötig aufgebläht. Man vermeidet so unnötige Fehler und manchmal auch unnötige DB Inserts.
    doch dies erzeugt pro mwl_user dem noch keine Rechte eingeräumt wurden einen unnötigen DS.
    Zu den unnötigen Fehlern:
    all-in1 schrieb:
    Und dann solltest du dir vielleicht nochmal ein Tutorial über Joins anschauen.
    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.

    Beitrag zuletzt geändert: 28.1.2013 18:27:19 von autobert
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!