Auslesen von zwei Tabellen, Ausgabe ist totales Chaos...

mrepox

Erfahrenes Mitglied
Hallo Freaks,
hier lese ich zwei Tabellen aus, jedes Feld der Tabellen zeige ich in einer echo Anweisung an.

Das Problem ist das alle Möglichkeiten angezeigt werden.

Es sollte so sein:

OrderID ist identisch in beiden Tabellen und soll als ID verwendet werden

Alle anderen Felder in der jeweiligen row sollen zu der orderID angezeigt werden.

Ausgabe zu Zeit:

OrderID mit allen Kundennamen, Adresse, nicht mit der dazu gehörigen

Kundenname, Adresse mit allen OrderID

Rechnungssumme mit allen verfügbaren OrderID oder Namen.


Also ein totales Durcheinander. Es sind lediglich drei Bestellung in der Datenbank, duch die verschieden falschen Zuordnungen werden 18 angezeigt.

Kann mir jemand bei der richtigen Zuordnung helfen?

Die OrderID hatte ich ja schon versucht als festen Ausgangspunkt zu wählen.

In der Tabelle Orders können meherer Artikel mit der gleichen OrderID stehen, die müssen dann alle mit Ausgegeben werden.












PHP:
<html>
<head>
  <title>Kunden und Bestelldaten</title>
</head>
<body>
<h2>Kunden und Bestelldaten</h2>
<table border="1" bgcolor="cc99ff" width="100%"><tr><td>
<?php
// kurze Variablennamen erstellen

// für PEAR DB vorbereiten
require_once('DB.php');
$user = 'xxxx';
$pass = 'xxxx';
$host = 'localhost';
$db_name = 'xxxx';

// universellen Verbingungsstring oder DSN angeben
$dsn = "mysqli://$user:$pass@$host/$db_name";

// mit der Datenbank verbinden
$db = &DB::connect($dsn);

// prüfen, ob die Verbindung funktioniert
if (DB::isError($db)) {
    echo $db->getMessage();
    exit;
}

// Abfrage ausführen
$query = "select * from orders,order_items where 'orderid'='orderid'";

$result = $db->query($query);

// prüfen, ob das Egebnis ok ist
if (DB::isError($result)) {
    echo $db->getMessage();
    exit;
}

// Anzahl der zurückgegebenen Zeilen ermitteln
$num_results = $result->numRows();

// jede Zeile anzeigen
for ($i = 0; $i < $num_results; $i++) {
    $orderid = $result->fetchRow(DB_FETCHMODE_ASSOC);
    echo '<p><strong>' . ($i + 1) . '. Bestellung: ';
    echo ($orderid['ship_name']);
    echo '</strong><br />Kunden ID: ';
    echo ($orderid['customerid']);
    echo '<br />AuftragsID: ';
    echo stripslashes($orderid['orderid']);
    echo '<br />Datum: ';
    echo stripslashes($orderid['date']);
    echo '<br />Versandadresse: ';
    echo stripslashes($orderid['ship_name']);
    echo '&nbsp;';
    echo stripslashes($orderid['ship_address']);
    echo '&nbsp;';
    echo stripslashes($orderid['ship_zip']);
    echo '&nbsp;';
    echo stripslashes($orderid['ship_city']);
    echo '&nbsp; ';
    echo stripslashes($orderid['ship_state']);
    echo '&nbsp;';
    echo stripslashes($orderid['ship_country']);
    echo '<br />Artikelnummer: ';
    echo stripslashes($orderid['ain']);
    echo '<br />Preis: ';
    echo stripslashes($orderid['item_price']);
    echo '<br />Anzahl: ';
    echo stripslashes($orderid['quantity']);
    echo '<br />Preis: ';
    echo stripslashes($orderid['item_price']);
      echo '</p>';
}

// Verbindung zur Datenbank trennen
$db->disconnect();

?>
</td></tr></table>
</body>
</html>
 
Zuletzt bearbeitet:
Vielleicht so?
Code:
SELECT * 
FROM orders 
JOIN order_items 
ON orderid
ORDER BY orderid

mrepox hat gesagt.:
In der Tabelle Orders können meherer Artikel mit der gleichen OrderID stehen
Den Satz hätte ich gerne nochmal genauer erklärt gehabt. Der verwirrt mich.

Gruß hpvw
 
Ja sorry, ich bin nicht grad der Erklärbär aber ich strenge mich jetzt mal an.


Im Shop werden die Daten der Bestellung wie folgt in Tabellen der DB gespeichert:

ORDERID,Kundenid, Rechnungsname, Adresse, Datum Summe.... in Tabelle "order"

ORDERID,AIN * (Artikelnummer), Bestellte Menge, Summe.... in Tabelle "order_item"

Lieferadresse, Name..... in Tabelle "Customer"


* In dieser Tabelle werden wenn eine Bestellung mehrere Artikel beinhaltet, die Artikelnummern jeweils mir der zugehörigen also gleichen ORDERID, gespeichert.
(Jeder Artikel ein neuer Zeileneintrag)


Nun will ich alle Daten Zwecks Bestellungs- Bearbeitung auslesen.
Natürlich dürfen die Daten nur zu der Order ID geordnet werden.


Hoffe ich habs nun besser getroffen.
 
Zuletzt bearbeitet:
Nur noch mal wiederholen, damit ich weiß, ob ich dich jetzt verstanden habe.
Der Kunde kommt. Wählt einen Artikel aus. Diese Auswahl speicherst du dann in einer DB (Tabelle order_items). Die ORDERID des Artikels ist z.B. 10. Der Kunde macht weiter. Wählt einen weiteren Artikel aus. Auch dieser bekommt in der DB die ORDERID 10. Stimmt das soweit?

In die Tabelle orders kommt dann vom jetzt anwesenden Kunden die ORDERID hinein, damit du beim abschicken der Bestellung alle Artikel auslesen kannst. Stimmt auch noch, oder?

Probier mal diese Abfrage:
Code:
SELECT 
       o.*, oi.*
FROM
      orders o, order_items oi
WHERE
      o.Kundenid = '$_SESSION['kundenid']' //WENN DU MIT SESSIONS ARBEITEST
      AND oi.ORDERID = o.ORDERID
 
Dann sollte das oben gepostete Query dem gewünschten Ergebnis zumindest sehr nahe kommen. Probier es mal aus und sage, was da noch nicht passt.
 
Ja soweit ist das richtig, die Daten kommen beim verlassen in die Db.

Das ist allerdings nicht so relevant.

Fakt ist, drei tabellen, zwei davon muss ich auslesen. die customer ist nicht so wichtig.

order_items und order müssen gelesen werden.

das hauptproblem lag allerdíngs im anzeigen der daten. bei meinem source werden alle möglichkeiten angezeigt. also mal die orderid 20 z.b. mit jeweils mit allen adressen oder artikeln.

bei order id20 darf keine adresse von orderid 33 kommen..

ich teste es gleich, habe grade meine tochter aufn arm
 
Zurück