Simon: Tabellen verknüpfen

Hallo,
ich finde keine passenden Suchworte fürs Archiv bzw. weiß daher auch nicht ob es schon mal angesprochen wurde.
Ich möchte folgende Inhalte bei der SELECT-Abfrage verknüpfen:

Tabelle cms_user:
id (Primärschlüssel)
status
username
userpass
usertask

Tabelle cms_usertask:
id (Primärschlüssel)
description

Nun steht z. B. folgendes in den Tabellen:
cms_user
id = 1; status = 1; username = root; userpass = ROOT; usertask = 2
id = 1; status = 1; username = user1; userpass = USER1; usertask = 1
cms_usertask
id = 1; description = SITE_VIEWER
id = 2; description = SITE_ADMIN

Die Ausgabe soll dann so aussehen:
USERNAME = root; AUFGABE = SITE_ADMIN
USERNAME = user1; AUFGABE = SITE_VIEWER

Wie bewerkstellige ich jetzt diese Verknüpfung bei der SELECT-Abfrage. Irgendwie bekomme ich das mit dem JOIN nicht hin.

Gruß .. Simon

  1. Hallo Simon,

    cms_user
    id = 1; status = 1; username = root; userpass = ROOT; usertask = 2
    id = 1; status = 1; username = user1; userpass = USER1; usertask = 1

    in der unteren Zeile ist id=2 (bzw. id!=1), oder?

    Die Ausgabe soll dann so aussehen:
    USERNAME = root; AUFGABE = SITE_ADMIN
    USERNAME = user1; AUFGABE = SITE_VIEWER

    vielleicht:
    SELECT u.username, ut.description as aufgabe
      FROM cms_user as u, cms_usertask as ut
      WHERE u.usertask = ut.id
    ?

    Grüße aus Nürnberg
    Tobias

  2. hallo

    kannst du mal deinen join herschreiben.

    select username,aufgabe from tabelle1,tabelle2 where tabelle1.id = tabelle2.id;

    mfg falke

    ansonsten http://dev.mysql.com/doc/mysql/de/join.html

    1. Hallo,

      kannst du mal deinen join herschreiben.

      mysql_query('SELECT user.*, usertask.* FROM cms_user AS user, cms_usertask AS usertask JOIN user ON user.usertask = usertask.description WHERE user.status = 1');

      select username,aufgabe from tabelle1,tabelle2 where tabelle1.id = tabelle2.id;

      Nee da gibt er ja nur aus was in der Tabelle steht. Ich will ja aber die Beschreibung (also description) und nicht die Nummer haben.

      Verstehst?

      Gruß .. Simon

      1. Hallo,
        ich hab das jetzt so gemacht, er gibt jetzt auch das aus. Außer die Beschreibung in Worten und nicht die Zahl

        mysql_query('SELECT user.id AS USER_ID, user.username AS USER_USERNAME, user.usertask, usertask.id, usertask.description AS USERTASK_DESCRIPTION FROM cms_user AS user LEFT JOIN cms_usertask AS usertask ON user.usertask = usertask.description WHERE user.status = 1');

        Gruß .. Simon

  3. Hallo,

    du hast den Primärschlüssel in der Datenbank nicht richtig definiert, das Feld id sollte unique sein. Oder ist das nur ein Tippfehler?

    cms_user
    id = 1; status = 1; username = root; userpass = ROOT; usertask = 2
    id = 1; status = 1; username = user1; userpass = USER1; usertask = 1

    Bitte kläre das, weil du so keine Verbindung zwischen den Tabellen bekommen KANNST.

    Kalle

    1. Hallo,

      du hast den Primärschlüssel in der Datenbank nicht richtig definiert, das Feld id sollte unique sein. Oder ist das nur ein Tippfehler?

      Nee Du hattest Recht!
      Die Indizes von cms_user sehen jetzt so aus:
      Name; Typ; Kardinalität; Feld
      PRIMARY; PRIMARY; id
      id; UNIQUE; id

      Ist das so richtig?! - Wobei ich aber glaube ich von der Datenbank her nicht die Tabellen automatisch verknüpfen darf. Diese Aktion ist abgechlatet.

      Gruß .. Simon