Tabellen mit identischen Feld-Namen eindeutig abfragen
Peter
- datenbank
Hallo liebes Forum,
folgende Frage:
wenn ich zwei mySql Tabellen mit einigen identischen Field-Namen aufbaue, z.B.
Table_A
id || pid || date_creation || foo || bar
und Table_B:
id || pid || date_creation || foreign_id || foobidoo || shalala
ist es dann möglich, in einem Query über beide Tabellen z.B. beide "date_creation" Werte auszulesen ?
Wenn ich versuche, ein select Statement folgendermaßen aufzubauen
SELECT dat.*, test.*
FROM Table_A dat, Table_B test
WHERE dat.pid = test.foreign_id ;
tauchen die Felder id, pid, date_creation - eigentlich erwartungsgemäß - im Result des Ganzen nur einmal auf.
Gibt es stattdessen eine Syntax, die es ermöglicht alle Felder auszulesen und das Ergebnis z.B. über einen Punkt-Operator (oder ein mehrdimensionales Array) zu referenzieren ?
also ein Result in etwa dieser Form zu erhalten :
$row = mysql_fetch_array($res, MYSQL_ASSOC);
echo $row['dat.date_creation']; // Wert aus Table_A
echo $row['test.date_creation']; // Wert aus Table_B
Das und wie ich das Ganze mit mehreren Queries erledigen kann, weiß ich. Geht´s auch mit einem ?
Bin für jeden Tip oder ein "Geht nicht." dankbar.
Gruß, Peter
select dat.date_creation as A, test.date_creation as B from dat, test where[..]
hoffe das hilft dir schon mal weiter, die spalten heissen dan A und B die zurückgegeben werden.
Jou, danke, das ist schonmal eine Lösung.
Das funktioniert aber nur mit einzelnen Werten ?
Denn es geht nicht, wenn ich´s als
select dat.* as A, test.* as B where
formuliere. Gibt´s da ne Lösung ?
Gruß, Peter
select dat.date_creation as A, test.date_creation as B, dat., test. from dat, test where[..] dann kriegst du alle felder von dat und test sowie die Felder A und B
oder ich hab dein problem nett gerafft ;-)
oder ich hab dein problem nett gerafft ;-)
Doch, hast Du... :-) ... ich wollt´s bloß _ganz_ einfach haben und direkt alle Felder in unterschiedliche Arrays einlesen... aber so geht´s auch.
Danke nochmal,
Peter
oder ich hab dein problem nett gerafft ;-)
ok,
wenn du in zwei arrays einlesen willst, dann benutz zwei queries. erst fragst du alle zeilen von dat ab, wo die id test entspricht und liest das ganze in Array A ein, Array B genauso bloss umgekehrt.
use Mosche;
Das funktioniert aber nur mit einzelnen Werten ?
Denn es geht nicht, wenn ich´s als
select dat.* as A, test.* as B where
formuliere. Gibt´s da ne Lösung ?
Meines Wissens nicht. Allerdings ist es keine gute Idee, ein select * zu machen.
Grund: Dein Code wird dadurch unleserlicher, weil man erst herausfinden muss, was überhaupt alles abgefragt wird. Auch die Reihenfolge der Attribute ist dann eindeutig.
use Tschoe qw(Matti);