Join

Was mach ich wenn ich 2 Tabellen mittels eines Joins verbinde, aber die beiden Tabellen eine gemeinsame Spaltenbezeichnung haben (Also z.b. beide habe eine Spalte'id'). So wenn ich jetzt mit der Funtkion mysql_fetch_assoc da ran gehe würden die Arraynamen sich überschneide! Wie separiere ich den jetzt die zwei id Spalten?
 
Code:
select tabelle1.id as tab1id, tabelle2.id as tab2id from tabelle1 left outer join tabelle2 on tabelle1.linker = tabelle2.linker

Verstanden? :)
 
türlich^^
Werden jetzt aber alle spalten selektiert oder nur die zweite bzw. müsste ich jetzt alle Spalten auf zählen.

Danke

Edit:

hab das hinzu gepackt und klappt: , tabelle1.*,tabelle2.*
 
Ich hab mir angewöhnt alle später zu nutzenden Variablen aus einem Statement im "select" direkt zu nennen. Die Nutzung von * im "select" ist etwas ungünstig, weil sich die Tabellen ja jederzeit ändern könnten. Wenn du dann z.B. mit $ref[2] auf die dritte Spalte des Ergebnisses zugreifen willst würde deren Inhalt ja ein anderer sein wenn du später (in einigen Monaten) mal vor der Spalte noch eine neue Spalte einfügst - Fazit wäre: Seite futsch. Daher am Besten immer mit den direkten Spaltennamen arbeiten.

Und wenn du trotzdem Sternchen benutzen willst mach es so rum:
Code:
select *, tabelle1.id as tab1id, tabelle2.id as tab2id from tabelle1 left outer join tabelle2 on tabelle1.linker = tabelle2.linker

Dadurch würdest du erst alle Spalten auswählen und danach die speziellen Spalten tab1id und tab2id erzeugen. Hätte natürlich zur Folge, dass du deren Positionen im Array erst ermitteln musst, da in * ja ziemlich viele sein könnten ;) Gibt wie gesagt nur Probleme mit den Sternchen :)
 
ok, danke jetzt muss ich aber doch nochmal was fragen.
Also ich habe jetzt 3 Tabellen, wobei die die zweite mit der ersten verknüpft ist und die dritte mit der zweiten verküpft ist und zwar jeweils über eine id.
So und jetzt will ich das mit einem sqlbefehl ausgeben.
Srry kann sowas immer schwer beschreiben, am liebsten wär mir wenn ihr vll eher ein deutschsprachiges SQL-Tutorial hättet wo das simple beschrieben ist.
Da ichs mit Joins eh nicht so drauf habe wärs besser wenn ich es lern als euh dauernd Löcher ind den Bauch frage.

Danke


Tabelle:
Code:
Tabelle 1                   Tabelle2                                 Tabelle 3
_________________________________
|                               |
id name Datum       id Betreff Tabellen1id          id Beschreibung  Tabellen2id
                     |____________________________________________________|
 
Bei diesem Aufbau gibt es 2 Möglichkeiten, auch ohne join:

a)
Code:
select * from tabelle1, tabelle2, tabelle3 where tabelle1.id = tabelle2.id and tabelle2.id = tabelle3.id

b)
Code:
select * from tabelle1, tabelle2 left outer join tabelle3 on tabelle2.id = tabelle3.id where tabelle1.id = tabelle2.id

Der Unterschied wäre, dass bei a) nur Ergebnisse kommen wenn in allen 3 Tabellen der jeweils verknüpfte Wert enthalten ist (und somit "where" erfüllt ist) und bei b) auch dann ein Ergebnis kommt wenn in Tabelle 3 der Wert nicht enthalten ist.

Join ist kompliziert zu verstehen. Da solltest du aus irgendeinem Tutorial mal einige Beispiele selber ausführen. Hab leider momentan keines zur Hand. Vielleicht reicht dir aber auch das offizielle Handbuch: http://dev.mysql.com/doc/refman/4.0/de/
 
sodala funktionieren tuts jetzt muss ich nur noch verstehen also wenn jemand ein gute sql tut hat immer her damit :D

EDIT: Sag mal wie mach ich das wenn ich alle Einträge der Tabelle1 anzeigen lassen möchte und wenn es dazu dann einen eintrag in tabelle2 und evtl dann auch in tabelle3 gibt anzeigen zu lassen. Momentan wird tabelle1 nur angezeigt wenn auch dazu ein eintrag in tabelle2 vorhanden ist

EDIT: habs jetzt selber rausbekommen
 
Zurück
Oben