PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datenabruf über 2 Ecken



Tanosuke_Hiro
06-01-2005, 13:45
Hi,

ich habe 4 Tabellen [Tab0, Tab1, Tab2, Tab3]. In Tab0 werden die Fremdkeys von Tab1 und Tab2 aufgeführt. Tab3 hat einen Fremdkey in Tab2.
Ich habe mit INNER JOIN Tab3 zu Tab2 zugefügt.
Ich kann jedoch nicht die Daten über Tab2 von Tab3 abrufen !

Weiß jemand warum ? Oder warum nicht ?


Wäre dankbar um Hilfe und Aufklärung ... MfG Tanosuke


Nähere Erläuterung meines Problems:



...
$tab01='SELECT * Tab0, Tab1 WHERE Tab0.id1=Tab1.id1';
$res_tab01=mysqlquery($tab01,$db_link);

$tab02='SELECT * Tab0, Tab2 WHERE Tab0.id2=Tab2.id2';
$res_tab02=mysqlquery($tab02,$db_link);

$tab23 = 'SELECT * Tab2 INNER JOIN Tab3 ON Tab2.id3=Tab3.id3';
$res_tab23= mysqlquery($tab23,$db_link);
WHILE ($rows=mysql_fetch_array($res_tab23,MYSQL_ASSOC))
{
echo $rows['id2'],"<br>";
echo $rows['id3'],"<br>"; // ID3 wird noch ausgegeben !!!
echo $rows['name'],"<br>"; // name aus Tab3 wird nicht ausgegeben !!!
}
...


Ich hoffe mein Problem ist ein wenig klarer !?!

quinte17
08-01-2005, 09:10
hast du sonst noch dopellte spaltenüberschrifften? also vielleicht ist ja in jeder tabelle eine name column... was ist wenn du dem select direkt sagst was du haben willst ala:

select tab3.name, tab2.id3 from tab2 innter join tab3 on tab2.id3=tab3.id3

mehr fällt mir dazu erstmal nciht ein, außer dass du den select mal von phpmyadmin anzeigen lässt...

greetz

Tanosuke_Hiro
09-01-2005, 01:46
Danke für die Antwort ! :o
Das ganze ist aber noch viel verworrener als gedacht !


...
$ausgabe='SELECT * FROM ap_tab, pp_tab, country_tab, type_tab, manu_pp_tab';
$ausgabe.=' WHERE ap_tab.pp_id = pp_tab.pp_id';
$ausgabe.=' AND ap_tab.country_id = country_tab.country_id';
$ausgabe.=' AND ap_tab.type_id = type_tab.type_id';
$ausgabe.=' AND pp_tab.manu_pp_id = manu_pp_tab.manu_pp_id';
$ausgabe_res=mysql_query($ausgabe, $db_link);
if(!$ausgabe_res)
{
die ('Error2:<br>' . mysql_error());
}
while($row=mysql_fetch_array($ausgabe_res, MYSQL_ASSOC))
{
echo $row['ap_name'],'<br>'; // Wird ausgegeben !
echo $row['pp_name'],'<br>'; // Wird ausgegeben !
echo $row['country'],'<br>'; // Wird ausgegeben !
echo $row['type'],'<br>'; // Wird ausgegeben !
echo $row['manu_pp'],'<br>'; // Soll auch ausgegeben werden !
}
...


Warum es nicht funktionieren könnte:
Die Tabelle ap_tab ist die Haupttabelle. 90% aller Fremdschlüssel sind dort. Jedoch nicht der Primärschlüssel von manu_pp_tab. Dieser ist in pp_tab !

Ich versuche jetzt eigentlich schon seit einigen Stunden die ap_tab und die pp_tab in einem query hineinzuquetschen ... denn ich möchte später alles in der richtigen Reihenfolge ausgeben können, da alles voneinander abhängig ist.


Ich möchte aus Tab3 über Tab2 durch Tab1 ausgeben können ! :)

quinte17
09-01-2005, 10:31
hast du es schonmal so versucht?


SELECT *
FROM ap_tab inner join pp_tab on ap_tab.pp_id = pp_tab.pp_id
inner join manu_pp_tab on pp_tab.manu_pp_id = manu_pp_tab.manu_pp_id
inner join country_tab on ap_tab.country_id = country_tab.country_id
inner join type_tab on ap_tab.type_id = type_tab.type_id

gibt es denn auch einen wert in manu_pp? der auf diesen select zutrifft?
kannst du mal die create tables anhängen? (dann kann man auch praktisch testen ;))

greetz

versuch doch mal deinen select so umzumodeln, dass die country_tab und type_tab nicht drin sind.. diese sind hier nur um andere informationen zu erhalten und nicht für deinen eigentlichen join... somit ist er leichter zu lesen.
dann kannst du dich auch besser auf deinen join konzentrieren ;)

Tanosuke_Hiro
09-01-2005, 11:14
Guten Morgen quinte17 und alle anderen,

ich könnte dir die Datenbanken schicken, sogenannte "CREATE TABLES" verwende/benutze ich nicht. Ich weiß schon wie diese funktionieren, doch ist es für mich einfacher und schneller, wenn ich die Dinge schnell in PhpMyAdmin mache. Deshalb kann ich dir nur anbieten die SQL-DB zu schicken.

Ich habe das ganze auf eigentlich einfachste Weise gelöst. Es funktioniert...



...
$ausgabe='SELECT * FROM ap_tab, pp_tab, country_tab,';
$ausgabe.='type_tab, manu_ap_tab, pic_tab';
$ausgabe.=' WHERE ap_tab.pp_id = pp_tab.pp_id';
$ausgabe.=' AND ap_tab.country_id = country_tab.country_id';
$ausgabe.=' AND ap_tab.type_id = type_tab.type_id';
$ausgabe.=' AND ap_tab.manu_ap_id = manu_ap_tab.manu_ap_id';
$ausgabe.=' AND ap_tab.pic_id = pic_tab.pic_id';
$ausgabe_res=mysql_query($ausgabe, $db_link);
if(!$ausgabe_res)
{
die ('Error2:<br>' . mysql_error());
}
echo '<table width="942" border="0" cellspacing="0" cellpadding="0" align="center">';
while($row=mysql_fetch_array($ausgabe_res, MYSQL_ASSOC))
{
echo '<tr><td colspan="4" align="center"><img src="ap_pic/'.$row['addy'].'"></td></tr>';
echo '<tr><td colspan="4">&nbsp;</td></tr>';
echo '<tr><td>Hersteller</td><td colspan="3">'.$row['manu_ap'].'</td></tr>';
echo '<tr><td>Flugzeugbezeichnung</td><td colspan="3">'.$row['ap_name'].'</td></tr>';
echo '<tr><td>Flugzeugtyp</td><td colspan="3">'.$row['type'].'</td></tr>';
echo '<tr><td>Ursprungsland</td><td colspan="3">'.$row['country'].'</td></tr>';

echo '<tr><td colspan="4">&nbsp;</td></tr>';
echo '<tr><td colspan="4" class="body"><u>Masse und Gewicht</u></td></tr>';
echo '<tr><td>Gesamtlänge</td><td>'.$row['length'].'</td>';
echo '<td>Spannweite</td><td>'.$row['span'].'</td></tr>';
echo '<tr><td>Höhe</td><td colspan="3">'.$row['heigth'].'</td></tr>';
echo '<tr><td>Leergewicht</td><td>'.$row['weight'].'</td>';
echo '<td>max. Startgewicht</td><td>'.$row['mweight'].'</td></tr>';

echo '<tr><td colspan="4">&nbsp;</td></tr>';
echo '<tr><td colspan="4" class="body"><u>Antrieb und Leistung</u></td></tr>';
echo '<tr><td>Triebwerksanzahl</td><td>'.$row['anzahl'].'</td>';
echo '<td>Antriebstyp</td><td>'; // Ab hier wird das Problem gelöst ! :D
$transfer2='SELECT * FROM pp_tab INNER JOIN pp_art_tab';
$transfer2.=' ON pp_tab.pp_art_id = pp_art_tab.pp_art_id';
$transfer2.=' WHERE pp_name like "'.$row["pp_name"].'" LIMIT 0, 30';
$transfer2_res=mysql_query($transfer2, $db_link);
if(!$transfer2_res)
{
die ('Error:<br>' . mysql_error());
}
while($row2=mysql_fetch_array($transfer2_res, MYSQL_ASSOC))
{
echo $row2['pp_art'];
}
echo'</td></tr>';
echo '<tr><td>Turbinenhersteller</td><td>'; // Und ab hier ein zweites Mal ! ^_^
$transfer='SELECT * FROM pp_tab INNER JOIN manu_pp_tab';
$transfer.=' ON pp_tab.manu_pp_id = manu_pp_tab.manu_pp_id';
$transfer.=' WHERE pp_name like "'.$row["pp_name"].'" LIMIT 0, 30';
$transfer_res=mysql_query($transfer, $db_link);
if(!$transfer_res)
{
die ('Error:<br>' . mysql_error());
}
while($row1=mysql_fetch_array($transfer_res, MYSQL_ASSOC))
{
echo $row1['manu_pp'];
}
echo'</td>';
echo '<td>Turbinenbezeichnung</td><td>'.$row['pp_name'].'</td>';
echo '<tr><td>Schub</td><td>'.$row['pp_schub'].'</td>';
echo '<td>Reisegeschwindigkeit</td><td>'.$row['speed'].'</td></tr>';
echo '<tr><td>Reichweite</td><td>'.$row['hrange'].'</td>';
echo '<td>Dienstgipfelhöhe</td><td>'.$row['vrange'].'</td></tr>';
echo '<tr><td colspan="4">&nbsp;</td></tr>';
echo '<tr><td colspan="4"><hr></td></tr>';
echo '<tr><td colspan="4"><hr></td></tr>';
echo '<tr><td colspan="4">&nbsp;</td></tr>';
}
echo '</table>';
...


Viel Spass beim schmöckern und danke nochmals für die Gedankenanregung und Hilfeleistung. Da das ganze ein Schulprojekt ist [Erstellung einer dynamischen Datenbank], kann ich dir anbieten die gesamten Skripte und Tabellen aus der Datenbank zuzuschicken.

Schreibe mir an die ICQ-Addy deine E-Mail oder schick mir eine PM in diesem Forum [sofern dies geht] und du bekommst es noch heute nacht zugeschickt.

Danke nochmals :)