Mysql: zweimal die gleiche Tabelle joinen

Hallo zusammen,
ich habe eine Tabelle

catalog_product_entity
entity_id (primary) sku
123 1
124 2
125 3
126 4

und eine Tabelle

catalog_product_link
link_id (primary) product_id linked_product_id
1 123 126
2 124 123
3 125 124

Ich möchte eine Ausgabe die mir die jeweiligen Skus der Entitäten die verknüpft sind anzeigt.

Im Beispiel wäre das

product_sku linked_product_sku
1 4
2 1
3 2

Ich weiß nicht wie ich das mit joins zusammen bringen kann. Es handelt sich dabei um Magento-Tabellen.

Hi Friedly,

es sollte ungefähr so gehen (tippfehler möglich):

SELECT
ent.id,
ent.sku AS product_sku,
link.linked_product_id
FROM
catalog_product_entity AS ent
LEFT JOIN (catalog_product_link AS link)
ON (ent.id= link.product_id)
WHERE ent.sku=123

und jetzt noch etwas erklärung zu logik:

im FROM statment sagen wir aus welcher primär tabelle wir daten haben wollen (hier geht unsere suche los)

interessant ist der LEFT JOIN
hier sagen wir das wir welche tabelle der Primären tabelle hinzugefügt werden soll.

im ON() part sargen wir welche beien werte identisch sein sollen.

ich habe diverse AS keywords verwendet um den tabellen "kürzere griffigere namen zu geben. und um in der ausgabe ein feld als sku zu product_sku umzubennenn.

ich hoffe ich hab nicht zu viele tippfehler über die Mysql stolpert.

gruss chris

Hi Friendly,

SELECT was du willst from catalog_product_entity inner join catalog_product_link on catalog_product_entity.entity_id = catalog_product_link.product_id where was du willst

Hey Friendly,

du kannst eine mysql Tabelle mit sich selber joinen, in dem Du den Tabellen Aliase vergibst (Schlüsselwort: AS).
In Deinem Beispiel:

SELECT product.sku, linked_product.sku
FROM catalog_product_entity AS product
LEFT JOIN catalog_product_link AS cpl
ON product.entity_id = cpl.product_id
LEFT JOIN catalog_product_entity AS linked_product
ON cpl.linked_product_id = linked_product.entity_id
WHERE …

wichtig ist nicht mehr die realen Tabelennamen zu nehmen, sondern den Namen, der mit dem AS statement definiert wurde.

Hoffe ich habe Dir weitergehlofen, habe von Magento keine Ahnung, dafür aber von mysql

Hallo Friendly,

vor ab, warum versteckt ihr euch immer hinter falschen Namen? Das hier ist ein Forum, in dem man sich ruhig anreden kann :smile: Sei’s drum, kommen wir zu Deinem Problem.
Um die gewünschte Lösung zu bekommen, würde ich

SELECT 
 catalog\_product\_entity.sku,
 catalog\_product\_entity\_1.sku 
FROM 
 (catalog\_product\_entity 
 INNER JOIN
 catalog\_product\_link 
 ON 
 catalog\_product\_entity.entity\_id = catalog\_product\_link.product\_id)
 INNER JOIN 
 catalog\_product\_entity 
 AS 
 catalog\_product\_entity\_1 
 ON 
 catalog\_product\_link.linked\_product\_id = catalog\_product\_entity\_1.entity\_id;

versuchen, das sollte Dein Wunschergebnis bringen.
Solange Du beide Skus in der selben Tabelle verwaltest, musst Du mit einem zweiten Join etwas tricksen.

So long,
Burkhard

die MySQL-Abfrage :

SELECT a.sku as product_sku ,
b.sku as linked_product_sku
FROM catalog_product_entity a ,
catalog_product_entity b ,
catalog_product_link l
WHERE a.entity_id = l.product_id
AND b.entity_id = l.linked_product_id

sollte funktionieren ;
wenn nicht bitte melden

Hi Friendly,

dies sollte deine Lösung sein. Wenn nicht Mail mir doch einfach :wink: Tutorials rund ums Programmieren findest du auf http://tutorials.moedesign.de

SELECT cpe.sku, cpl.link_id
FROM catalog_product_entity AS cpe
INNER JOIN catalog_product_link AS cpl
ON cpe.entity_id = cpl.linked_product_id

Hallo Friendly,

mit Mangento habe ich noch nie gearbeitet und auch die Spaltennamen verwirren mich etwas. Aber du solltest dir anhand das simplen Beispiels Herleitenkönnen, was du machen musst.

SELECT tabelle1.spalte2, tabelle2.spalte3
FROM tabelle1 left join tabelle2 on
tabelle1.verlinkte_spalte = tabelle2.verlinkte_spalte
[WHERE …]

MySQL Referenzbuch Join: http://dev.mysql.com/doc/refman/5.1/de/join.html

MFG

Hi, sorry dass ich erst jetzt antworte, aber ich habe deine Anfrage erst jetzt gesehen.

Du brauchst eine Tabelle wo die Daten über die ID verbunden sind. Z.B. eine Tabelle nur mit

einer Spalte entity_id und einer Spalte mit link_id
(über beide Spalten den Primärschlüssel einstellen)

dann kannst du damit abfragen.