Probleme mit Abfrage über zwei Tabellen :-(

E

encom

Hallo,

ich lese alle Einträge aus einer mySQL-Tabelle (komponenten) mit php aus.

nun habe ich eine zweite mySQL-Tabelle (Warenkorb)in der Artikelnummern stehen die Artikeln der Tabelle "Komponenten" zugeordnet sind.


Wie kann ich nun beim auslesen der Daten aus der Tabelle "Komponenten" anhand der Artikelnummer prüfen ob dieser Artikel in der Tabelle "Warenkorb" vorhanden ist?

Wie kann ich nun hinter jeden Artikel aus Tabelle "Komponenten" schreiben ob der Artikel in der Tabelle "Warenkorb" vorhanden ist?

Danke
 
Wie sieht denn die Struktur der Tabellen aus, also welche Tabelle hat welche Felder (Name und Typ).

redlama
 
Tabelle Komponenten

id, artnr, name

Tabelle Warenkorb

id, art_nr, name, menge

Also in Tabelle Komponenten stehen einige Artikel.
Nun wurden z.B. 2 Artikel in den Warenkorb gelegt. Also habe ich in der Tabelle Warenkorb die zwei art_nr stehen.

Auslesen will ich alle Artikel aus der Tabelle komponenten.
Alle Artikel die schon im Warenkorb liegen sollen in der ausgelesenen Liste markiert sein. also text dahinter.

Danke
 
Du willst also alle Artikel aus der Tabelle Komponenten haben, für die es keinen Eintrag in der Tabelle Warenkorb gibt, richtig?
Wieviele Daten hast Du denn so?

redlama
 
Nein, ich will den kompletten Bestand aus der Tabelle Komponenten.

und in der Ausgabe der Daten aus der Tabelle Komponenten, sollen nur alle Einträge markiert werden wo die ArtNr auch in der Tabelle Warenkorb vorhanden sind.

Es sind nicht viele Datensätze, ca 30 höchstens.

Danke
 
Also wenn Du nur ca. 30 Datensätze hast, dann könntest Du z. B. alle Datensätze aus Komponenten auslesen und dann jeden für jeden Datensatz überprüfen, ob es einen passenden Eintrag in Warenkorb gibt. Wenn ja wird der Datensatz markiert (wie auch immer Du Dir das vorstellst).
Ist vielleicht ein wenig umständlich, aber was besseres fällt mir auf die schnelle nicht ein.

redlama
 
Ja das habe ich mir auch so gedahct nur komme ich mit den zwei Abfragen nicht klar.
Hättest du eventuell ein kleines Beispiel?

Ich lese alles aus Komponenten in einer While Schleife aus.
Ich lese alles auch Warenkorb in einer Whileschleife aus.

Und wie mache ich das nun das die richtigen Artikel markiert werden?

Danke
 
ensacom hat gesagt.:
Ja das habe ich mir auch so gedahct nur komme ich mit den zwei Abfragen nicht klar.
Hättest du eventuell ein kleines Beispiel?
Das Zauberwort heisst "Joins".

Willst Du nur die Komponenten auslesen, die auch im Warenkorb vorhanden sind, solltest Du einen "Inner Join" verwenden. Dabei werden alle Komponenten mit den Datensätze in der Warenkorb Tabelle verbunden. Die Abhängigkeit ist dabei über die Spalte art_nr in beiden Tabellen gegeben.

Wenn Du jetzt aber alle Komponenten ausgeben willst und bei der Ausgabe die Datensätze markieren willst, die auch in der Warenkorb Tabelle vorhanden sind, wendest Du einen sogenannten "Left (Outer) Join" an. Der Unterschied hierbei ist, dass auch die Datensätze selektiert werden, bei denen es keine Übereinstimmung anhand der Artikel Nummer in der Warenkorb Tabelle gibt. In diesem Fall sind die Spalten id und art_nr aus der Warenkorb Tabelle in dem entsprechenden Recordset leer (bzw. NULL).

Dann kannst Du in einem Schleifendurchlauf die Spalte auf ihren Inhalt überprüfen und je nach Wert den jeweiligen Datensatz farblich markieren.

So, das wars zur Theorie, jetzt kommts zur Praxis:

Code:
SELECT
    k.id,
    k.art_nr,
    k.name,
    w.id,
    w.menge 
FROM
    komponenten k
LEFT OUTER JOIN
    warenkorb w
ON
    k.art_nr = w.art_nr
ORDER BY
    k.id

** edit **

Wenn in der Spalte "name" in der Warenkorb Tabelle der Name der Komponente stehen soll, dann brauchst Du die Spalte nicht in der Warenkorb Tabelle anlegen. Wenn Du einen Join anwendest, kannst Du ja auf alle Spalten aus den verbunden Tabellen zurückgreifen. Stichwort: Redundanz!
 
Zuletzt bearbeitet:
Vielleicht eine kleiner Ideenumgestaltung:

Wenn die Tabelle WARENKORB wirklich das beinhaltet was der Kunde will, was machst du dann wenn mehrere Kunden gleichzeitig artikel aussuchen und auswählen?
das gibt nur Kuddelmuddel glaub ich !
Vielleicht die Artk.nr. in einer Session speichern ?! Wäre das eine Möglichkeit, ich weiss jez nich genau,ich hätte das jez so gemacht :
PHP:
$_SESSION["warenkorb"].= $artknr;

Später beim bezahlen aufruf aus dem Komponenten wo alle art. drin sind, und dann nach artknummer auflisten lassen!

PHP:
$sql = mysql_query ("SELECT ".$_SESSION["warenkorb"]." FROM komponenten");
$result = msql_result ("$sql");   // angaben ohne gewähr, natürlich muss alles in ein Array

Wenn meine Äusserung fehl am platze ist, irgnoriert sie =) wollte nur helfen vielleicht nacher n schweren Fehler zu verhüten =D
 
Zurück