Mysql Abfrage über mehrere Tabellen

TTron

Grünschnabel
Hallo miteinander,

nachdem ich jetzt seit 2 Tagen versuche diese Abfrage zu gestalten, sehe ich wohl den Wald vor lauter Bäumen nicht mehr.

Folgende Ausgangssituation:

1. Tabelle
Id, User, Pkt, Info

2. - 10. Tabelle
Id, a, b , d, User, f

In den Tabellen 2 - 10 sind diverse Datensätze drin, die unter anderem auch die Spalte User beinhaltet.
Wie kann ich mir jetzt alle Datensätze in den Tabellen 2 -10 von einem bestimmten User anzeigen lassen?

Wenn ich das so versuche:

PHP:
$sql = "SELECT * FROM tabelle2,tabelle3,tabelle4 WHERE Besitzer = 'xy";

kommt folgendes:

Code:
Column 'User' in where clause is ambiguous


Gruß
Jens
 
Hallo,

die Fehlermeldung bedeutet, dass die Spalte "User" nicht eindeutig ist und er somit nicht weiß welche Spalte du genau meinst.
Ausserdem würde ich bei 10 Tabellen auf keinen Fall das Kreuzprodukt verwenden, hier würde ich eher zu Joins raten.

SQL:
SELECT * FROM 
(
  (
    (
      tabelle2 t2 JOIN tabelle1 t1 ON t2.User = t1.id
    ) JOIN tabelle3 t3 ON t3.User = t1.id
  ) JOIN tabelle4 t4 ON t4.User = t1.id
) JOIN usw...

Gruß
BK
 
Hi BK,

danke für deinen Hinweis.
Das mit dem mit "nicht eindeutig" habe ich mir auf grund der engl. Bedeutung schon gedacht, aber inwiefern ist die Spate User nicht eindeutig :confused:

Wenn ich das in deinem Vorschlag richtig sehe, muss ich also als WHERE Bedingung die Id aus Tabelle 1 nehmen, in deren Zeile der besagte User steht?


Gruß
Jens
 
Hallo,

bei dem Kreuzprodukt hast du am Ende die Spalte User 9x (Steht ja in der Tabelle 2 - 10). Somit weiß MySQL nicht, welche "User" es aus den 9 Tabellen nehmen soll.
Deine Frage verstehe ich jetzt nicht ganz, aber anscheinend hast du noch nicht mit Joins gearbeitet.
Lies dir hierzu am Besten ein paar Erklärungen durch, Joins sind sehr praktisch wenn man mal verstanden hat, was das ist ;)

MySQL-Handbuch: JOIN
Einführung in JOINs
Andere Einführung

Gruß
BK
 
Stimmt .. hab ich bisher noch nicht ;)

Allerdings hab ich dein Beispiel ausprobiert ...
Wenn ich nur t1 und t2 nehme, dann klappt das in soweit, das mit t1.id kein Ergebnis bekomme ... was ja auch irgendwie klar ist ... t1.ID != t2.User.
Vielleicht stimmt auch mein Tabellenaufbau nicht ;) ... ein Ergebnis bekomme ich mit t1.user = t2.user . Verschachtelung klappt dann auch mit WHERE Bedingung auf einen bestimmten User :)

Soweit so gut ... die Datensätze landen aber ja jetzt im Ergebnis "nebeneinander" ... finde ich in der Doku zu JOIN auch ne Möglichkeit das "untereinander" auszugeben?
Wäre ja irgendwie einfacher für die Auswertung, da ich ja "nur" alle Datensätze eines Users ausgeben möchte !?


Gruß
Jens
 
Zuletzt bearbeitet:
UNION wird dir helfen. Die MySQL Doku beschreibt dieses Thema ausführlich :-).
 
Danke @Bloddy ... wenn man weiß wo nach man suchen muss, dann hilft das ... ;)

Jetzt sieht`s so aus wie ich wollte :) :)


Gruß
Jens
 
Zurück