(JOIN-Verknüpfung)Identische Felder in Tabellen

Moin,
ich habe 2 Tabellen, welche Felder mit der gleichen Bezeichnung enthalten,
nun möchte ich diese aber mit Join Verknüpfen.
Wie kann ich dann feststellen aus welcher Tabelle das Feld ist?

Bsp.
Meine SQL-Syntax lautet:

$sql\_string =
 "SELECT \* FROM call"
 ." LEFT JOIN editor"
 ." ON editor\_bank.id=call.editor\_id"
 ." ORDER BY call.priority DESC";

Nun ist in der Tabelle ‚call‘, sowie ‚editor‘ das Feld ‚id‘ vorhanden,
wenn ich die Daten auslese bekomme ich immer als ID das Feld aus der Tabelle ‚editor‘ ausgegeben,
kann ich das auch bestimmen, aus welcher Tabelle das Feld genommen werden soll? Oder muss ich die Bezeichungen in der Tabelle ändern?

Vielen Dank und Gruß

Marcel

Moin Marcel,

sei mir nicht böse aber das glaube ich dir nicht.
Denn du schreibst:

Meine SQL-Syntax lautet:

> $sql\_string =  
> **"SELECT \* FROM call"**  
> ." LEFT JOIN editor"  
> ." ON editor\_bank.id=call.editor\_id"  
> ." ORDER BY call.priority DESC";

Frei übersetzt: Wähle alles aus call!

Demzufolge bekommst du auch das Feld id aus der Tabelle call.
Du bestimmst mit deiner SELECT-List, welche Felder aus welchen Tabellen du sehen willst.

So, und jetzt warte ich auf jemanden, der mich vom Gegenteil überzeugt.

Grüßt: Guido

Hallo Guido,

sei mir nicht böse aber das glaube ich dir nicht.

Nö, bin nicht böse *g*,
das Problem ist wenn ich das Array auslese bekomme ich als ‚id‘ die ‚1‘ und ‚2‘ (aus Tabelle ‚editor‘) angezeigt,
in der Tabelle ‚call‘ steht aber nur ein Eintrag mit ‚9‘ bzw ‚10‘

So, und jetzt warte ich auf jemanden, der mich vom Gegenteil
überzeugt.

Da bin ich mal gespannt lol.

Trotzdem schonmal danke!

Marcel

Alternative Lösung
Okay,
wenn ich die Syntax umbaue:
Alt::

> $sql\_string =  
> "SELECT \* FROM call"  
> ." LEFT JOIN editor"  
> ." ON editor.id=call.editor\_id"  
> ." ORDER BY call.priority DESC";

Neu:

$sql\_string =
 "SELECT \* FROM editor"
 ." RIGHT JOIN call"
 ." ON editor.id=call.editor\_id"
 ." ORDER BY call.priority DESC";

Komme ich wenigstens zu meinem gewünschten Ergebnis,
wäre aber trotzdem interessant, ob es ne andere Möglichkeit gibt.

Gruß

Marcel

Hallo,

beim LEFT/RIGHT Join gibst du doch schon vor, das du haben willst.
Versuch doch mal:

SELECT c.attribu1, c.attribut2, c.usw, e.attributx, e.usw
FROM call c, editor e
WHERE c.id = e.id
AND sonstnochwas
ORDER BY wasduauchwillstabermitaliasnamendamiteskeinedoppeltengibt;

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin, Marcel,

Da bin ich mal gespannt lol.

ein „select *“ liefert alle Spalten aus den verknüpften Tabellen. Mit den Inhalten hat das zunächst nichts zu tun, die bestimmen sich aus der Trefferliste, die aus der Where-Klausel resultiert. Schau Dir mal die Spaltenköpfe an.

Gruß Ralf

Hallo Peter,
fein, hab ich verstanden,
klappt fürs Erste auch.
Jetzt habe ich aber in 2 Tabellen ein Feld ‚timestamp‘,
beide Felder können unterschiedlich sein und sollen daher ausgegeben werden,
geht das auch? Wahrscheinlich scheitere ich da an den gleichen Feldbezeichnungen, oder?
Bzw. wenn nicht, und das über den Alias gehen soll,
wie kann ich dann nachher die Daten per PHP auslesen?

Danke nochmal und Gruß

Marcel

SELECT c.attribu1, c.attribut2, c.usw, e.attributx, e.usw
FROM call c, editor e
WHERE c.id = e.id
AND sonstnochwas
ORDER BY
wasduauchwillstabermitaliasnamendamiteskeinedoppeltengibt;

Ausgabe mit AS, aber immer nur 1. Datensatz
Da bin ich nochmal,
hab’s endlich entdeckt,
kann die Felddaten in eine bestimmt Variable schreiben mit ‚AS‘

Jetzt gehe ich noch hin und gruppiere die Daten,
aber ich würde gerne immer den letzten DS angezeigt bekommen, nicht den ersten. Geht das irgendwie?
Bsp:
Tab1:
W1,W2,W3
1,2,3
2,3,4

Tab2:
tab1_w1, ausgabewert
1,2
1,5
1,6
2,5

Ausgabe ist nun
1,2,3 --> 1,2 !
2,3,4 --> 2,5

Ich hätte aber gerne den letzen DS ausgegeben,
also
1,2,3 --> 1,6
2,3,4 --> 2,5

Als Ermittlung, welcher Datensatz der neueste ist, könnte ich das Feld ‚timestamp‘ heranziehen

Hoffe ich konnte mich verständlich ausdrücken.

Danke für eure Hilfe

Gruß
Marcel

Hallo,

musst du aber nicht.
Die Feldnamen heißen ja eigentlich schema.tabelle.attributname. Nur in der Anzeige wird der reine Attributname genommen und das Problem hast du ja gelöst.

Den neusten Datensatz:
AND datumsfeld = (SELECT max(datumsfeld) FROM tabelle)

Nicht alle DB können so einen geschachtelten Select. (Mysql bis 4.1.13 oder so kanns nicht)

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter,
nochmals vielen Dank für deine Hilfe,
mit der AND-Anweisung kam ich zwar so nicht weiter,
aber hab’s jetzt hingedreht bekommen.
Bin auf jedenfall, auch dank deiner Hilfe am Ziel.

Schönen Gruß

Marcel

Den neusten Datensatz:
AND datumsfeld = (SELECT max(datumsfeld) FROM tabelle)

Nicht alle DB können so einen geschachtelten Select. (Mysql
bis 4.1.13 oder so kanns nicht)