kostenloser Webspace werbefrei: lima-city


Abfrage über 3 Tabellen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Hi
    ich habe ein problemchen mit einer größeren Abfrage.

    Ich habe 3 TAbellen:
    admins:
    id | name

    admins_groups:
    id | name

    admins_groups_members:
    id | admin_id | group_id

    Ich möchte mir jetzt folgendes ausgeben lassen:
    Admin - ID
    Admin - Name
    Group - Name (Gruppen in denen der Admin ist)

    Das ganze sieht so aus, dass jeder Admin und jede Gruppe eine ID hat. in der Membertabelle steht dann welche adminid zu welcher Gruppe gehört. (Jeder Admin kann in beliebig vielen Gruppen sein / In jeer Gruppe können beliebeig viele admins sein).

    Hoffe dass das mit einer JOIN abfrage geht, zweifel ich aber weil ich soweit ich weis damit nur 2 Tabellen bzw nur aus einer Ausgaben machen kann.
    MFG
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Und was ist jetzt deine Frage?

    Ich rate mal ins blaue hinein und sage dir folgendes:
    Ich habe schon einmal mit einem JOIN Query 5 Tabellen verknüpft. Also: Ja, es geht.

    Beitrag zuletzt geändert: 20.12.2011 0:50:12 von adrians
  4. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Nabend.

    Wenn ich dir eine Hilfestellung anbieten dürfte: Libreoffice.org Base.
    Dieses kann man auch mit einer MySQL-Datenbank verknüpfen und hat dann ein grafisches Tool zur Verfügung über welches Relationen erzeugt werden können. Die SQL-Syntax lässt sich dann ganz leicht anzeigen und kann in anderen Einsatzgebieten verwendet werden.

    Zum Problem: Du hast nicht spezifiziert, wonach du suchen willst...
    Sprich: Eine Tabelle mit allen Admins und zu welchen Gruppen sie gehören oder eine Tabelle aller Gruppen mit allen Admins oder eben was genau...
  5. SELECT
      A.ID, A.Name, G.Name
    FROM
      admins A
    JOIN
      admins_groups_members M ON M.admin_id = A.ID
    JOIN
      admins_groups G ON G.ID = M.group_id


    Allerdings bekommt man so nur die Admins, die auch mindestens einer Gruppe zugewiesen wurden. Will man auch die ohne Gruppen erwischen, muss man einen OUTER JOIN verwenden.
  6. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Vielen Dank :)
    Das mit office ist ne super Idee, bin ich nie drauf gekommen :D

    @deddyh
    Genau so wollte ichs haben. (Jeder Admin hat ne gruppe, daher sollte das kein Ding sein)

    Allerdings aus Interesse:
    Was ist Outer Join?
  7. http://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL:_OUTER_JOIN

    Ich fand übrigens immer die AS Schreibweise sehr Komfortabel...

    SELECT ... FROM `a` AS table1, `b` AS table2 WHERE table2.wert = table1.wert

    usw usf.
  8. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Sorry, aber das mit dem outer Join und so verstehe ich nicht so ganz. Wie genau soll ich das umsetzen? und in welchem Object in PHP sind denn dann die Daten?
    MFG
  9. e******n

    hier ist eine gute Beschreibung von den ganzen Sql Befehlen, unter anderem auch für den Befehl Join

    http://reeg.junetz.de/DSP/node10.html#SECTION04280000000000000000
  10. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Danke, aber wirklich verständlich wird mir das immer noch nicht. Und ausserdem hab ich nach wie vor das Problem, wie ich das denn als php-object ausgeben soll.
    MFG
  11. Wie wäre es, wenn du dir erstmal die Basics von SQL und den mysql_* Befehlen anschaust...?

    Ich rkeige langsam das Gefühl, dass du keine Ahnung hast und hier auf eine fertige Antwort wartest. oô
  12. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Sorry, ich habe einfach nur noch nie mit Abfragen über 3 Tabellen gearbeitet. Fand 2 ja schon nicht soo leicht.

    Vielleicht drücke ich mich falsch aus. Ich möchte wissen wie ich auf die Daten im php Objekt zugreifen kann.
    normal ja $row->name aber bei 2 tabellen die beide das feld 'id' haben kann das ja nicht gehen (geht auch nicht).

    Und die Abfrage an sich, Abfragen mit Join hab ich verstanden aber das outer und inner und equal joun verwirrt mich eher als das es mir was bringt.
  13. Stichwort: AS

    Ein mächtiges, kleines Wörtchen in SQL ;)
  14. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    $quest = "SELECT A.id, A.nickname, G.name FROM admins A LEFT JOIN admins_groups G JOIN admins_groups_members M ON A.id = M.admin_id";
                          $result = mysql_query($quest);
                          while($employer = mysql_fetch_object($result)){


    So hab ichs versucht und das geht nicht.
    Fehlerausgabe:
    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in [...]/index.php on line 2870

    Wie soll ich da ein AS rein haun? ich habs vor die Deklaration gemacht (admins as A) aber das ging auch nicht.
    MFG und frohe Weihnachten



    Beitrag zuletzt geändert: 24.12.2011 11:45:43 von programtools
  15. Da fehlt noch die Verknüpfungsbedingung zwischen admins und admin_groups. Allerdings sollte das dann eher zuviele als zuwenige Datensätze liefern. Mit AS hat das übrigens gar nichts zu tun. Hast Du mal meine Abfrage von oben per phpMyAdmin o.Ä. ausprobiert? Werden dort Datensätze geliefert?
  16. Hallo programmtools,

    die folgende Abfrage sollte eigentlich funktionieren:
    SELECT A.id, A.nickname, G.name 
    FROM (admins AS A LEFT JOIN admins_groups_members AS M ON A.id = M.admin_id)
        LEFT JOIN admins_groups AS G ON M.group_id = G.id




    Beitrag zuletzt geändert: 24.12.2011 12:28:11 von darkpandemic
  17. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Danke, aber leider nicht. Ich erhalte den gleichen fehler, dass mysql_fetch_object eine ungültigen Parameter bekommen hat.
    MFG
  18. Mach mal eine Fehlerausgabe an dein mysql_query oder führe einen query direkt in MySQL aus.

    mysql_query(...) OR die("DEBUG: " .. mysql_error());


    PS:
    Wenn er mehrere unabhängige id's hat, die er mit ausgegeben haben möchte, die nicht deckungsgleich sind aber trotzdem den selben Namen haben hat das sehr wohl etwas mit AS zu tun.
    Mag sein, dass ich seinen Post falsch verstanden habe. Ich habe gestern nur flott drüber gelesen, weil ich auf dem Sprung war. ;)
  19. Hallo programmtools,

    ich habe die Sache jetzt mal mit SQLite nachgestellet. Folgendes hat funktioniert:
    SELECT a.id, a.nickname, g.name
    FROM admins AS a
        LEFT JOIN admins_groups_members AS m ON a.id = m.admin_id
        LEFT JOIN admins_groups AS g ON m.group_id = g.id;
    Die Klammern sollte man wohl weglassen. Sicherheitshalber habe ich die Alias-Namen noch klein geschrieben.
  20. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Vielen Dank, hat geklappt.
    Ich war mit den Namen der Tabellenfelder durcheinander gekommen und hatte 2 Vertauscht. ist dann aber dank adrians Debug Tipp raus gekommen.

    Vielen Dank und noch frohe Festtage!

    Beitrag zuletzt geändert: 25.12.2011 16:22:37 von programtools
  21. 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!