Einen Datensatz mit Werten aus anderem Datensatz anzeigen lassen

Warzenjohnny

Neuer Benutzer
Beiträge
2
Moin,

ich habe ein Problem bei einer MySQL Datenbankabfrage, die ich später in einem PHP Script verwenden möchte, das eine CSV Datei mit den Produktdaten aus einem Onlineshop generieren soll.

Die Standartwerte, wie z.B. Mengen oder Preise sind unproblematisch bei der Abfrage, da diese Daten aus der Tabelle "products" kommen.

Anders sieht es bei den Produktnamen oder den Produktbeschreibungen aus, da diese in drei Sprachen vorliegen und in der Tabelle "products_description" als jeweils eigener Datensatz mit einer von drei "language_id" und mit der zugehörigen "products_id" aus der Tabelle "products" gespeichert sind.

Die folgende Datenbankabfrage gibt die angeforderten Daten aus. Jedes Produkt drei mal als Datensatz, jeweils mit der "language_id" für die entsprechende Sprache (2 = deutsch, 1 = englisch, 5 = französisch).

SQL:
SELECT
p.products_ean, p.products_quantity, p.products_price, p.products_msrp, p.products_date_added, p.products_last_modified, p.products_status, p.manufacturers_id,
pd.products_id, pd.language_id, pd.products_name, pd.products_description, pd.products_short_description, pd.products_keywords
FROM products p
LEFT JOIN products_description pd ON p.products_id = pd.products_id
ORDER BY pd.products_name ASC

Das Ergebnis sieht dann so aus:

select_ergebnis.jpg

Leider brauche ich das Ergebnis aber so, dass jedes Produkt nur einmal, also in nur einer Zeile bzw. in einem Datensatz ausgegeben wird, der dann aber alle drei Sprachen der Daten products_name, products_description, products_short_description und products_keywords aus der Tabelle products_description beinhalten soll. Diese sollen natürlich eine eigene Spalte und Überschrift je Sprache bekommen (siehe Beispiel).

beispiel.jpg

Vor 20 Jahren hab ich mal einen 4 Wochen MySQL Kurs mitgemacht, aber davon bis heute nicht mehr viel übrig geblieben, daher würde ich mich über ein paar Denkanstöße freuen.

Vielen Dank 😅
 
Werbung:
Das sollte in etwa so ausschauen
SQL:
SELECT p.products_ean
    ,p.products_quantity
    ,p.products_price
    ,p.products_msrp
    ,p.products_date_added
    ,p.products_last_modified
    ,p.products_status
    ,p.manufacturers_id
    ,pd.products_id
    ,pd.products_name AS products_name_de
    ,pd.products_description AS products_description_de
    ,pd.products_short_description AS products_short_description_de
    ,pd.products_keywords AS products_keywords_de
    ,pe.products_name AS products_name_en
    ,pe.products_description AS products_description_en
    ,pe.products_short_description AS products_short_description_en
    ,pe.products_keywords AS products_keywords_en
    ,pf.products_name AS products_name_fr
    ,pf.products_description AS products_description_fr
    ,pf.products_short_description AS products_short_description_fr
    ,pf.products_keywords AS products_keywords_fr
FROM products p
LEFT JOIN products_description AS pd ON p.products_id = pd.products_id AND pd.language_id = 2
LEFT JOIN products_description AS pe ON p.products_id = pe.products_id AND pe.language_id = 1
LEFT JOIN products_description AS pf ON p.products_id = pf.products_id AND pf.language_id = 5
ORDER BY pd.products_name ASC
 
Werbung:
Zurück
Oben