Abfrage über 3 Tabellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
abfragen
base
befehlen
code
dank
datum
einsatzgebiet
gruppe
http
klammern
parameter
problem
relation
tabelle
tun
umsetzen
url
weglassen
zweifel
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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... -
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. -
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? -
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. -
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 -
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 -
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 -
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ô -
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. -
$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 -
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?
-
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 -
Danke, aber leider nicht. Ich erhalte den gleichen fehler, dass mysql_fetch_object eine ungültigen Parameter bekommen hat.
MFG -
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. ;) -
Hallo programmtools,
ich habe die Sache jetzt mal mit SQLite nachgestellet. Folgendes hat funktioniert:
Die Klammern sollte man wohl weglassen. Sicherheitshalber habe ich die Alias-Namen noch klein geschrieben.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;
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage