MySQL - mehrere Tabellen über INNER JOIN auslesen

binAuchHier

Grünschnabel
Hallo,

Quelle eine alte XTC - Datenbank. Über INNER JOIN konnte ich die Kundendaten in den Tabellen 'address_book' und 'customers' auslesen. Als nächstes stehen die Artikeldaten und die Kategorien an. Ein erster Test mehrere Tabellen mit Produktinfos über INNER JOIN auszugeben ging daneben. Kann mal einer von den Profis drüberschauen, wo der Fehler liegt?

Schonmal Danke

PHP:
$read_qry = mysql_query ("SELECT *
                       
                        FROM products
                        INNER JOIN products_attributes
                          ON products.products_id = products_attributes.products_id
                       
                        INNER JOIN products_content
                          ON products.products_id = products_content.products_id
                         
                        INNER JOIN products_description
                          ON products.products_id = products_description.products_id");

echo "<table border=1>";
echo "<tr>\n";
    echo "<th>[products] products_id</th>\n";
    echo "<th>[products] products_image</th>\n";
    echo "<th>[products] products_price</th>\n";
   
    echo "<th>[products_attributes] products_attributes_id</th>\n";
    echo "<th>[products_attributes] attributes_stock</th>\n";
    echo "<th>[products_attributes] price_prefix</th>\n";
   
    echo "<th>[products_description] products_name</th>\n";
    echo "<th>[products_description] products_description</th>\n";
    echo "<th>[products_description] products_keywords</th>\n";
echo "</tr>\n";

while ($zeile = mysql_fetch_array( $read_qry))
{
echo "<tr>";
  echo "<td>". $zeile['products_id'] . "</td>";
  echo "<td>". $zeile['products_image'] . "</td>";
  echo "<td>". $zeile['products_price'] . "</td>";

  echo "<td>". $zeile['products_attributes_id'] . "</td>";
  echo "<td>". $zeile['attributes_stock'] . "</td>";
  echo "<td>". $zeile['price_prefix'] . "</td>";

  echo "<td>". $zeile['products_name'] . "</td>";
  echo "<td>". $zeile['products_description'] . "</td>";
  echo "<td>". $zeile['products_keywords'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close();
 
Hallo Yaslaw,
danke der schnellen Rückmeldung. Beim Aufruf der PHP wird nur der Tabellenkopf ausgegeben:

PHP:
echo "<tr>\n";
    echo "<th>[products] products_id</th>\n";
    echo "<th>[products] products_image</th>\n";
    echo "<th>[products] products_price</th>\n";
   
    echo "<th>[products_attributes] products_attributes_id</th>\n";
    echo "<th>[products_attributes] attributes_stock</th>\n";
    echo "<th>[products_attributes] price_prefix</th>\n";
   
    echo "<th>[products_description] products_name</th>\n";
    echo "<th>[products_description] products_description</th>\n";
    echo "<th>[products_description] products_keywords</th>\n";
echo "</tr>\n";

Die Tabellen 'products', 'products_attributes' und 'products_description' haben alle die 'products_id'. Zum testen wollte ich mir aus den 3 Tabellen jeweils die Daten (siehe Tabellenkopf) ausgeben lassen.
 
1). Sofort, aber wirklich sofort alle mysql_X Befehle mindestens durch mysqli_X befehle ersetzen. mysql_X wird seit Jahren nicht mehr unterstützt! Weg damit.

2) Ist schwer zu sagen. Irgendwo hast du eine INNER JOIN Verbindung, die keine Gemeinsamkeiten findet.
Ersetz mal die INNER JOIN durch LEFT JOIN. Dann solltest du sehen, wo eine der 3 Tabellen keine Daten liefert,
 
Okay, den Hinweis mit dem veralteten Kram habt ihr mir letztens bei den Kundendaten ja schon gegeben. Damit ich mit einem 12 Jahre alten XT-Shop überhaupt was anfangen kann und an die Daten komme, läuft er lokal unter einem XAMPP 1.5.4, PHP 5.16, MySQL 5.0.24a. Zu der Zeit waren die Befehle bestimmt noch okay? Schau mir aber parallel gerade noch paar neuere Informationen an.

Das LEFT JOIN bringt mir Ausgaben zu [products] und [products_description]. Die Spalten [products_attributes] und [products_content] bleiben leer, obwohl z.B. [products_attributes] natürliche auch eine 'products_attributes_id' hat.
 
Das heisst, dass die products_attributes keine Daten zum Produkt enthält. Die IDS passen nicht überein.
 
Mal abgesehen von deiner Frage würde ich dir raten deine komplette Infrastruktur zu modernisieren. PHP5 wird seit Anfang diesem Jahres nicht mehr supportet. Und bei einem 12 Jahre alten Shop würde ich auch bezweifeln, dass du gerade die aktuelle Version nutzt.
 
@Yaslaw Die ID's passen nicht überein. Das macht mich eben stutzig. Habe mir extra den gesamten Aufbau der DB in eine Excel Tabelle gezogen, siehe Screen im Anhang. Die Tabellen [products] und [products_attributes] nutzen beide die 'products_id'.

@Kalito auch dein Hinweis ist angekommen, danke. Weshalb ich mir lokal ein XAMPP 1.5.4 mit PHP 5.16 und MySQL 5.0.24a aufgespielt habe, hängt an dem xt:Commerce 3.04, der in neueren Umgebungen nicht mehr läuft. Plan, Migration auf eine moderne Shopsoftware.
 

Anhänge

  • db_xtc.jpg
    db_xtc.jpg
    346,9 KB · Aufrufe: 2
D.h. zwischen der 'products_id' in der Tabelle [products_attributes] und der 'products_id' in der Tabelle [products] besteht kein Zusammenhang? Welchen Sinn ergibt das?
 
Zurück