Ausgabe mehrerer Tabellen (WhileSchleife)

Tab

unlimited
ID: 374854
L
26 Juni 2007
900
71
Hallo liebes Forum,

ich stehe vor einem kleinen Problem. Ich habe 2 Datenbanktabellen. Die erste gebe ich ganz normal mit einer Schleife aus. Um nun aber die Werte aus der zweiten Tabelle auszugeben, benötige eine WHERE abfrage mit dem Vergleich der ID aus Tabelle eins.

PHP:
<?php
require_once('connection.php');

$mysql = "SELECT * FROM products ORDER BY products_model DESC";
$mysql_query = mysql_query($mysql);

?>

<table style="font-family: verdana, arial; font-size: 11px;">
    <tr height="50">
        <td width="200"><b>Artikelnummer (+)</b></td>
        <td align="right"><b>Preis</b></td>
        <td width="50"><b>Anzahl</b></td>
    </tr>

<?php
while($row = mysql_fetch_object($mysql_query))
  {
?>      
    <tr>
        <td><?php echo $row->products_model; ?></td>
        <td align="right"><?php echo number_format($row->products_price, 2, ',','.') ?> EUR</td>
        <td align="right"><?php echo $row->products_quantity; ?></td>
    </tr>
<?php
  }
?>
</table>

Ich weiß jetzt nicht wo die zweite Schleife hinkommt, bei der die Daten aus Tabelle 2 ausgegeben werden?

Liebe Grüße
 
Vergiss dein Vorhaben 8O

Wenn ich das richtig verstehe, suchst du nach einem JOIN. Das Verknüpfen der beiden Tabellen sollte die Datenbank übernehmen. Im Himmels Willen mach das nicht von Hand mit Schleife und WHERE. Du benutzt ja grade eine Datenbank, damit du dir die Drecksarbeit sparen kannst.
 
  • Like
Reaktionen: Tab
Kennst Du dafür ein gutes Tutorial? In meinen beiden Fachbüchern habe ich leider nichts zu diesem Thema gefunden.

Liebe Grüße
 
Suchst Du sowas hier:
PHP:
$mysql = "SELECT 
			p.*,
			ps.`gekauft` 
		FROM products AS `p`
		INNER JOIN `product_stats` AS `ps`
			ON(p.`id` = ps.`id`) /* order einfach USING(`id`) */
		ORDER BY p.`products_model` DESC";
$mysql_query = mysql_query($mysql);

?>

<table style="font-family: verdana, arial; font-size: 11px;">
    <tr height="50">
        <td width="200"><b>Artikelnummer (+)</b></td>
        <td align="right"><b>Preis</b></td>
        <td width="50"><b>Anzahl</b></td>
        <td width="50"><b>schon gekauft</b></td>
    </tr>

<?php while($row = mysql_fetch_object($mysql_query)): ?>      
    <tr>
        <td><?php echo $row->products_model; ?></td>
        <td align="right"><?php echo number_format($row->products_price, 2, ',','.') ?> EUR</td>
        <td align="right"><?php echo $row->products_quantity; ?></td>
        <td align="right"><?php echo $row->gekauft; ?></td>
    </tr>
<?php endwhile; ?>
</table>

Das ist das was theHacker meinte.
 
Kennst Du dafür ein gutes Tutorial?
Natürlich. Ich kenne sogar fast eineinhalb Millionen Tutorials :D
https://lmgtfy.com/?q=join+mysql+tutorial

...und das nur für MySQL 8)
In meinen beiden Fachbüchern habe ich leider nichts zu diesem Thema gefunden.
Der relationale Operator einer jeden Datenbank ist der JOIN (Relationenverbund). Ich weiß ja nicht, was du für Fachbücher hast, aber um Datenbanken scheints da nicht zu gehen :mrgreen:

Hier ein Link:
https://de.wikipedia.org/wiki/Relationale_Algebra#Join
Das is zwar kein Fachbuch, scheint deiner Literatur aber überlegen zu sein ;)
 
Ich habe es mir jetzt einmal selber zusammengebaut:

PHP:
$mysql = "SELECT * FROM products INNER JOIN products_description ON (products.products_id = products_description.products_id) ORDER BY products_model DESC";
Leider gibt er mir jetzt alle Werte doppelt aus...?

Liebe Grüße


EDIT: Habe das problem gefunden, doch wie beheben?

In der Tabelle products_describtion ist jede product_id doppelt. Einmal für language = 1 und einmal für language = 2


Habs. Habe eine AND Abfrage mit reingeschrieben....
 
Zuletzt bearbeitet:
Mein MYSQL Query sieht nun folgendermaßen aus:

PHP:
$mysql = "SELECT * FROM products INNER JOIN products_description ON(products.products_id = products_description.products_id) AND products_description.language_id = 1 ORDER BY products.products_model DESC";

Doch wie muss ich diesen abändern, wenn ich den Wert manufactors_id aus Tabelle products_describtion mit demselben Wert in Tabelle manufactor vergleichen muss, um auch noch den Hersteller auszugeben?

Liebe Grüße
 
Mach das AND wieder raus, sowas gehört in eine Where also so:
PHP:
$sql="... on(...) WHERE `products_describtion`.laguage = " . $_SESSION['language']) . " ORDER BY ....";

denk bitte an SQL Injection das ist nur ein Beispiel.
 
Code:
SELECT * FROM
  products
INNER JOIN
  products_description
ON
  products.products_id = products_description.products_id
LEFT JOIN
  manufacturers
ON
  products_description.manufacturer.id = manufacturers.manufacturer.id
WHERE
  products_description.language_id = 1
ORDER BY
  products.products_model DESC

Von einem "manufactor" hab ich noch nie was gehört.... :nö:
 
So ganz funktioniert es noch nicht.

Beschreibung

Ich möchte alle Produkte ausgeben, leider sind die Daten auf mehrere Tabellen verteilt. Die Tabellennamen lauten:

  • products, products_description, manufacturers, products_attributes und products_options_values
Die Tabelle products beinhaltet eine products_id, genauso wie die products_describtion. Somit kann man diese Beiden schonmal ausgeben.

Um nun die Werte aus manufactures auszugeben, benötige ich die manufacturers_id aus der Tabelle products.

Und zum Schluss benötige ich noch die Werte von options_values_id aus der Tabelle products_attributes, um die Werte aus der Tabelle products_options_values auszugeben.

Problem

Ich weiß leider nicht, wie ich die Werte nun ausgeben kann. Meine aktuelle SQL Anweisung funktioniert schon soweit, nur werden die Daten aus products_options_values noch nicht ausgeben. Bei dieser Anweisung hapert es bei mir.

PHP:
$mysql = "SELECT * FROM 
            products
          INNER JOIN
            products_description 
          ON
              products.products_id = products_description.products_id
          LEFT JOIN 
            manufacturers
          ON
            products.manufacturers_id = manufacturers.manufacturers_id
          WHERE 
            products_description.language_id = 1 
          ORDER BY products.products_model ASC";
$mysql_query = mysql_query($mysql);
Liebe Grüße,
Tab

PS: Kennt ihr vielleicht eine gute Seite auf der JOIN erklärt ist?
 
Ich habe die Abfrage nochmal überarbeitet.

PHP:
$mysql = "
    SELECT * FROM
        products
    INNER JOIN 
        products_description
    ON
        products.products_id = products_description.products_id
    INNER JOIN
        manufacturers
    ON
        products.manufacturers_id = manufacturers.manufacturers_id
    WHERE
        products_description.language_id = 1 
    ORDER BY 
        products.products_model ASC
    INNER JOIN
        products_options_values
    ON
        products_attributes.options_values_id = products_options_values.products_options_values_id";

Leider funktioniert die Ausgabe noch nicht so ganz. Nehme ich die letzte INNER JOIN Abfrage raus, funktioniert es, jedoch fehlen dann natürlich die Werte aus der letzten Abfrage.

Ich weiß halt nicht genau, wie bzw. wo ich diese letzte Abfrage nun hinschreiben soll.

Liebe Grüße
 
Die Namen stammen aus dem osCommerce System.

Leider bekomme ich immer noch keine Ausgabe nach dem Ändern der Position.

Das Problem ist auch folgendes. Dieser Join muss mir folgendes ausführen. Er muss in die Tabelle products_attributes hineingeben. Dort die Datensätze anhand der product_id finden und dann die options_values_id zurückgeben. Mit diesem Wert will ich nun den Zustand aus der Tabelle products_options_values ausgeben.
 
Er muss in die Tabelle products_attributes hineingeben. Dort die Datensätze anhand der product_id finden und dann die options_values_id zurückgeben. Mit diesem Wert will ich nun den Zustand aus der Tabelle products_options_values ausgeben.

Ah... mir geht ein Lichtlein auf. Du musst noch auf products_attributes anhand der Produkt-ID joinen um die options_values_id zu bekommen. Das tust du nämlich momentan nicht.
 
Ah... mir geht ein Lichtlein auf. Du musst noch auf products_attributes anhand der Produkt-ID joinen um die options_values_id zu bekommen. Das tust du nämlich momentan nicht.

Vielen Dank für Deine Antwort.
Stehe gerade auf dem Schlauch. Wie genau bringe ich diese Abfrage mit ein?
 
PHP:
SELECT * FROM
        products AS p
    INNER JOIN 
        products_description AS pd
    ON
        p.products_id = pd.products_id
    INNER JOIN
        manufacturers AS pm
    ON
        p.manufacturers_id = pm.manufacturers_id
    INNER JOIN
        products_attributes AS pa
    ON
        p.products_id = pa.keineahnungwas
    INNER JOIN
        products_options_values AS pov
    ON
        pa.options_values_id = pov.products_options_values_id
    WHERE
        pd.language_id = 1 
    ORDER BY 
        p.products_model ASC

Hab auch mal Aliase gesetzt, dass das etwas kürzer wird.
 
  • Like
Reaktionen: Tab