Wie verknüpfe ich 2 Tabellen einer Datenbank zur ?

Liebe/-r Experte/-in,
ich habe eine datenbank mit den Tabellen product + product_description

die Tabelle product zeige ich so:

Datenbank actosbe_cart Resultaten

<?php $link = mysql_connect("localhost","actosbe_4711","xxxx");
mysql\_select\_db("actosbe\_cart"); $abfrage = "SELECT product\_id, model, image FROM product"; $ergebnis = mysql\_query($abfrage); while ($row = mysql\_fetch\_object($ergebnis)) { echo "$row-\>product\_id, $row-\>model, $row-\>image "; } mysql\_free\_result($ergebnis); mysql\_close($link); ?\> nun will ich in der ersten Tabelle in der Spalte "image" die Daten austauschen mit den Daten aus der Spalte "name" in der zweiten Tabelle product\_description. Wie mache ich das? Gibt es da eine Formel? Gruss, Edgar

Ich würde die beiden Tabellen über eine OUTER-JOIN-Anweisung in SQL verknüpfen. Da mir nähere Info zur Beschaffenheit der Tabelle product_description fehlt, setze ich einfach mal voraus, dass auch hier die Spalte product_id vorhanden ist.

Eine mögliche SQL-Anweisung könnte dann so aussehen (in $abfrage):

SELECT P.product_id, P.model, PD.name as image FROM product
left outer join product_description PD on (PD.product_id = P.product_id)

Den Teil „as image“ kann man weglassen. Er bewirkt lediglich, dass sie Spalte bei einer Ersetzung von Daten auch wieder unter dem Namen „Image“ in der Auflistung auftaucht.

Ich hoffe ich konnte helfen.

Grüße

Chris

Hallo Edgar,

Wenn ich Dich richtig verstehe hast Du zwei Tabellen, die Informationen zum Produkt enthalten.

Deine Abfrage selektiert drei Spalten aus der Tabelle product. Um jetzt die Information aus der zweiten Tabelle product:description zu selektieren, musst Du quasi dein SQL statement umschreiben:

Mit Hilfe eines Join-Befehls kannst Du eine zweite Tabelle mit auswählen (Siehe Beispiel). Damit Du das Ergebnis soweit einschränkst, muss auch eine Where Klausel eingebaut werden. Die stellt sicher, das beide Tabellen korrekt mit einander verknüpft werden.

Hier mal dein Beispiel mit einer Annahme: Beide Tabellen besitzen die Spalte product_id.

$abfrage = „SELECT a.product_id, a.model, b.name FROM product AS a JOIN product_description AS b WHERE a.product_id = b.product_id“

Generell ist es hilfreich, bei solchen Anfragen die Tabellenstrukturen zu kennen, damit die SQL Statements auch passen.

Ich hoffe ich konnte helfen.

Gruß,

Sascha

Hallo Edgar,
der „Update from Select“ ist unser täglich Brot und ist stark datenbankabhängig.
In Deinem Fall sollte schon dieses einfache Beispiel anwendbar sein:

mysql

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

m.f.G.

Johannes

Guten Morgen Sascha,

Danke zur schnellen Antwort.
Deine Formel funktioniert. Klasse!

Ich habe zu dieser Tabelle noch eine Frage.

Die Tabellen sind in Deutsch und Englisch und in der Ausgabe werden beide zusammen folgendermassen ausgegeben:

product_id
50 D
50 E
51 D
51 E
52 D
52 E
usw.

ich möchte aber nur alles in Deutsch ausgeben ohne die Englische!
Hast Du hierfür auch eine Lösung parat?

Danke im voraus.

Gruss,
Edgar

Hallo Edgar,

für diese Verknüpfung brauchst du etwas mehr Wissen über die Anfragesprache SQL. Damit kann man beschreiben, welche Daten man gerne aus der Datenbank hätte und wie diese ausgewählt, verknüpft und sortiert werden sollen.

In SQL nennt sich eine solche Verknüpfung „Join“ oder „Verbund“: http://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL:…

ich habe eine datenbank mit den Tabellen product +
product_description

$abfrage = „SELECT product_id, model, image FROM product“;
$ergebnis = mysql_query($abfrage);

nun will ich in der ersten Tabelle in der Spalte „image“ die
Daten austauschen mit den Daten aus der Spalte „name“ in der
zweiten Tabelle product_description.

In deinem Fall sähe die SQL-Anfrage vermutlich so ähnlich aus (es fehlen die Angaben über die genauen Spalten in der Tabelle product_description, und es gibt verschiedene Möglichkeiten, die Anfrage aufzuschreiben):

SELECT p.product_id, p.model, d.name
FROM product p, product_description d
WHERE d.product_id = p.product_id

Wie du siehst, werden hier Daten aus zwei Tabellen bezogen (FROM), aber nur solche Paarungen zugelassen, bei denen eine Verknüpfungsbedingung (WHERE) erfüllt ist.

Wenn es nicht zu jedem Produkt eine Beschreibung gibt, brauchst du stattdessen einen „Left Outer Join“. Ich fürchte aber, du müsstest dir zunächst mehr Wissen über SQL aneignen, bevor du das verstehst, vielleicht hiermit: http://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL

Viel Erfolg und viele Grüße,

Andreas

Hallo Edgar,

versuch’s mal mit diesem SQL-Statement:
SELECT T.PRODUCT_ID, T.MODEL, T.NAME
FROM
(
SELECT A.PRODUCT_ID, A.MODEL, B.NAME
FROM PRODUCT AS A
JOIN PRODUCT_DESCRIPTION AS B
WHERE A.PRODUCT_ID = B.PRODUCT_ID
) AS T
WHERE T.PRODUCT_ID LIKE ‘%D’ – hier selektierst du nur die Werte mit einem ‚D‘ am Ende der Spalte PRODUKT_ID

Viele Grüße
Thomas

Hallo Johannes,
„Update from Select“ ist nicht was ich suchte,
aber Danke zum Vorschlag.
Gruss,
Edgar

Hallo Chris,
es funktioniert, danke.
Gruss,
Edgar

Hallo Andreas,
ich werde deinen Vorschlag ausprobieren und mich auch mehr in SQL vertiefen.
Danke,
Edgar

Hallo Thomas,
ich werde deinen Vorschlag ausprobieren.
Danke,
Edgar

Hallo Edgar,
das machst Du am besten über das SQL in Deiner Abfrage. Wenn Du davon aber keine Ahnung hast, dann wird das schwierig. Der Befehl lautete ungefähr so:

SELECT product.product_id, product.model, product_descriptiohn.name FROM product, product_description WHERE product.product_id = product_description.product_id

Immer vorausgesetzt, dass product_id in beiden Tabellen existiert. Dabei handellt es sich um eine Datenbank Verknüpfung oder Relation.
Es kommt übrigens auch noch drauf an um welche DB es sich handelt. Kann sein, dass das bei Deiner anders geschrieben werden muss…

Gruß,
Benny

Hallo Benny,

danke, dein script funktionierte direct perfect.

Vielleicht kannst du mir nochmal weiterhelfen weil ich noch eine Verbindung mit 3 Tabellen brauche.

Das sind die Tabellen:

Tabelle: product
product_id | model | manufacturer-id | price
1 | ar100 | 10 | 10,10
2 | ar150 | 15 | 10,50
3 | as200 | 11 | 15,90
4 | as250 | 15 | 20,50
5 | bb300 | 11 | 12,30
6 | bb350 | 15 | 12,80

Tabelle: product_description
product_id | language_id | name
1 | 1 | Château La Gorce 2007
1 | 5 | Château La Gorce 2007
2 | 1 | Château Meilhan 2006
2 | 5 | Château Meilhan 2006
3 | 1 | Salmon Rosé 2008
3 | 5 | Salmon Rosé 2008

Tabelle: manufacturer
manufacturer_id | name
10 | Armand Salmon Wijngoed
11 | Yalumba Winery
12 | Elan Estate
13 | Montes Winery
14 | Viljoensdrift
15 | Castello di Bosso

Die Ausgabe soll sein:
model, name(product_description),name(manufacturer), price

Vielen Dank im voraus.

Gruss,
Edgar

Hallo Edgar,

Entschuldige die späte Antwort, aber ich war im Urlaub. Bitte setze Dich mit SQL auseinander.
Weitere Bedingungen werden in der „Where“ Klausel gesetzt. Ich denke über Google wirst Du die entsprechende Syntax finden.

Gruß,

Sascha