SQL Inner Join Problem

Hallo Habo.

Es handelt sich um folgende Tabellen die ich mit
Code:
SELECT * FROM tbl_user INNER JOIN tbl_Gruppen ON tbl_user.gruppe_zwischen_id = tbl_gruppe_zwischen.tbl_user_ID
abfragen möchte.

-----------------------
tbl_user
id
loginname
nickname
email
passwort
gruppe_zwischen_id


tbl_gruppe_zwischen
id
tbl_user_ID
tbl_gruppen_ID

tbl_gruppen
id
namen

SQL spuckt diese Fehlermeldung aus :

#1054 - Unknown column 'tbl_gruppe_zwischen.tbl_user_ID' in 'on clause'

Ich möchte halt eine n:m Relation realisieren und alle Eigenschaften der tbl_user ausgeben. Dazu habe ich eine Zwischentabelle angelegt.

Muss ich da noch irgendwelche Beziehungen wie in Access setzen oder funktioniert das so?
Wenn ja, wie realisiere ich das mit PhpMyAdmin.
Wenn nein, was ist an meinem Sql-Query falsch?

LG, weau
 
Du joinst ja nirgends die "tpl_gruppe_zwischen", deshalb kommt der Fehler.

Code:
SELECT
          u.*,
          g.*
FROM
          tbl_user u

JOIN
          tbl_gruppen_zwischen gz
ON
          u.id = gz.tbl_user_ID

JOIN
          tbl_gruppen g
ON
          g.id = gz.tbl_gruppen_ID

So sollte das ganze funktionieren.

Ach ja, ich würde die Tabelle "tbl_gruppe_zwischen" nochmal überdenken.

Ich würde das ganze so machen:

user_group_mappings
user_id
group_id

Und die beiden Spalten als Primary Key.
 
THX
Code:
SELECT * FROM tbl_user INNER JOIN tbl_gruppe_zwischen ON tbl_user.id = tbl_gruppe_zwischen.tbl_user_ID JOIN tbl_Gruppen ON tbl_Gruppen.ID = tbl_gruppe_zwischen.tbl_gruppen_ID
funktioniert!

Aber warum sollte ich die Zwischentabelle überdenken? Erkläre mal wie du das mit dem Primary Keys meinst?

Der Inner Join nimmt ja auch leider eine ziemliche Abarbeitungszeit in Anspruch. Gibt es da noch irgendwelche anderen Methoden eine n:m Relation zu lösen?
 
Aber warum sollte ich die Zwischentabelle überdenken? Erkläre mal wie du das mit dem Primary Keys meinst?

Naja, bei diesem DB Design ist es möglich, dass in der tbl_gruppe_zwischen folgendes auftreten kann:

id - tbl_user_ID - tbl_gruppe_ID
1 - 1 - 2
2 - 1 - 2
3 - 1 - 2

Was ja wohl keinen Sinn macht, da ein User bestimmt nicht mehrmals in der gleichen Gruppe vorkommt. Wenn man sowas beim DB Design berücksichtigt, dann hat man es später bei der implementierung einfacher.

Der Inner Join nimmt ja auch leider eine ziemliche Abarbeitungszeit in Anspruch.

Wieviele Datensätze haben denn die Tables?
Vermeide wo es geht alles zu ziehen, benutze z.B. eine WHERE - Klausel, und ein SELECT * benötigt auch sehr viel Zeit.
Hier mal ein Link, ich bin heute Schreibfaul.
 
Naja, bei diesem DB Design ist es möglich, dass in der tbl_gruppe_zwischen folgendes auftreten kann:

id - tbl_user_ID - tbl_gruppe_ID
1 - 1 - 2
2 - 1 - 2
3 - 1 - 2

Einfach die user_id mit der gruppen_id unique setzen und das Problem ist gelöst. Die id-Spalte ist trotzdem sinnlos, weil du sie einfach nicht brauchen wirst.
 
Original von Indi
Einfach die user_id mit der gruppen_id unique setzen und das Problem ist gelöst. Die id-Spalte ist trotzdem sinnlos, weil du sie einfach nicht brauchen wirst.

Wie setze ich denn die user_ID & gruppen_ID unique

Mit phpmyadmin sieht es im moment so aus (siehe Anhang).

Reicht das, weil du meintest ja user_id mit gruppen_id unique setzen?
 
Zuletzt bearbeitet:
Bei phpmyadmin unter Struktur "Index über [2] Spalten anlegen", die zwei Spalten auswählen und bei Indextyp "Unique" wählen. Das verhindert eben, dass bei gleichen Werten der user_id bzw. gruppen_id ein neuer Datensatz angelegt wird. Gegebenenfalls die MySQL-Docu lesen.
 
Zurück
Oben