2 Tabellen

Danke für eure Hilfe, doch nun ist das das erste Problem beseitigt, folgt das nächste.

Nun muss ich 3 Tabellen mit einander verknüpfen um alle Daten auszugeben.

Es ist nun noch eine Tabelle auftraege hinzugekommen, so ist es dem Verleihsystem Betreiber möglich alle Daten auszugebene.

Es sollen am Ende alle bestellten Produkte + persönliche Daten ausgegebenen werden. Wie mache ich das?

3 Tabellen JOIN? Kennt jemand vielleicht ein deutsches und leicht verständliches Tutorial dazu?

Gruß

Alex
 
SELECT a, b, c, [...]
FROM Tabelle1
JOIN Tabelle2
ON Tabelle1.a=Tabelle2.a
JOIN Tabelle3
ON Tabelle2.b=Tabelle3.c
... to be continued!

Allerdings kannst du auf MySQL nur einen einzigen Join verwenden, wenn ich mich recht entsinne.
Da müsstest du das Ergebnis der Abfrage auf Tabelle 1 und 2 in eine temporäre Tabelle speichern und diese dann mit Tabelle 3 verknüpfen.
 
@durin mysql ist zwar nur eine halbe sql DB aber auch hier kann man tabelle in einer Abfrage joinen bis der Arzt kommt :-)
 
Hab auch noch nicht mit MySQL gearbeitet.
Kann sein, dass ich mich da verhört habe und es sich um etwas anderes gehandelt hat, was du nicht weiter schachteln kannst.

In dem Fall gilt natürlich das genannte Beispiel auch für MySQL
 
So bin nun leider nicht zu Hause. (im Urlaub)

Ich habe nun mal versucht nach eurer Anleitung die SQL anweisung zu erstellen.

Wie gesagt noch nicht getestet:

Tabelle 1: auftraege

name
vorname
event
sid


Tabelle 2: warenkorb

sid
pid


Tabelle 3: produkte

pid
name
firma


SQL Anweisung:
SELECT auftraege.name, auftraege.vorname, auftraege.event, auftraege.sid, warenkorb.pid, warenkorb.sid, produkte.name, produkte.firma, produkte.pid
FROM auftraege
JOIN warenkorb ON auftrage.sid = warenkorb.sid
JOIN produkte ON warenkorb.pid = produkte = pid

Die Daten sollen nachher anhand der sid (Session Id) ausgelsen werden. Würde diese SQL Anweisung alle Daten ausgeben?

Danke für eure Hilfe...

Gruß
Alex
 
Ja, das sollte funktionieren.

Allerdings kriegst du so nur die Datensätze angezeigt, bei denen auch ein Warenkorb existiert.
Wenn du auch die ohne anzeigen willst, muss der erste JOIN ein LEFT JOIN sein.


PS: Ich würde den Spalten sprechende Namen geben, z.B. SessionID statt sid oder Lieferant statt Firma.
Das hat den Vorteil, dass du gleich weisst, worum es sich handelt.
Gerade Firma kann in einer Datenbank mehrfach vorkommen - als Lieferant, Hersteller (in der Produktbeschreibung), Kunde oder Dienstleister.
 
Hi Leute,

Also das Skript ist soweit eigentlich fertig. Ich bin noch dabei einige kleinigkeiten zu verfeinern.
Beispielsweise, soll im Warenkorb der Totale Preis angezeigt werden.

Beispielsweise:

Anzahl: 1 Produkt: Top Loader Preis / Tag: 10 Euro

Anzahl: 4 Produkt: Mikrofon Preis / Tag: 10 Euro


Preis Total: 50 euro


Wie bekomme ich den gesamt betrag raus?

Den gesamt betrag pro Produkt herauszubekommen, ist ja kein Problem, doch wie löse ich das bei allen Produkten, die sich imWarenkorb befinden?

Danke für eure Hilfe!


Gruß

Alex
 
Du musst im Warenkorb eine Spalte Anzahl oder ähnliches haben.
Dann kannst du ein Alias einfügen:

SELECT *, produkte.preis*warenkorb.anzahl AS ZwSumme FROM auftraege
JOIN warenkorb ON auftrage.sid = warenkorb.sid
JOIN produkte ON warenkorb.pid = produkte.pid

Ich weiß nicht, ob das mit dem *, ... funktioniert.
Aber du musst auf alle Fälle ein Alias hinzufügen.
Hier heißt dieses ZwSumme (für Zwischensumme).
Es errechnet sich aus produkte.preis * warenkorb.anzahl.
Du kannst dieses Alias dann einfach als Result auslesen.
Dann musst du nur noch in deiner Schleife eine Gesamtsummen-Addition einbauen.

Etwa so:
PHP:
$Verbindung = @mysql_connect($db_host, $db_user, $db_pass);
$SQLString = "SELECT *, produkte.preis*warenkorb.anzahl AS ZwSumme FROM auftraege 
JOIN warenkorb ON auftrage.sid = warenkorb.sid
JOIN produkte ON warenkorb.pid = produkte.pid";
$Ergebnis = mysql_db_query($db_name, $SQLString, $Verbindung);
$anz = mysql_num_rows($Ergebnis);
$gsumme = 0;
for($i=0;$i<$anz;$i++)
{
 $titel = mysql_result($Ergebnis, $i, "produkte.name");
 $anzahl = mysql_result($Ergebnis, $i, "warenkorb.anzahl");
 $preis = mysql_result($Ergebnis, $i, "produkte.preis");
 $zwsumme = mysql_result($Ergebnis, $i, "ZwSumme");
 echo $anzahl."x ".$titel." für je ".$preis." = ".$zwsumme."\n";
 $gsumme += $zwsumme;
}
echo "Gesamtsumme: ".$gsumme."\n";

Das Beispiel habe ich nicht getestet.
Müsste aber funktionieren...
 
Zurück