Zum Inhalt springen
  • 0

[MYSQL] SQL Abfrage KategorieBaum


Frage

Geschrieben

Moin

Ich schreib gerade einen Job, der bei Ausführung anhand einer Tabelle meiner Datenbank einen Kategoriebaum Generieren soll.

Meine Tabelle enthält folgende Werte: KategorieID (ID der ArtikelKategorie), ParentId (ID des Elternteils), name, Magento_ID (Sobald ich dem Kategoriebaum in Magento etwas hinzufüge, weißt Magento diesem eine eigene Magento ID zu, deswegen muss ich die generierte Magento_ID auslesen um sie mit der richtigen AritkelKategorie zu verknüpfen. 

Leider will das noch nicht ganz klappen.

Ich hab mir dieses SQL query ausgedacht:

SELECT    k1.*, k3.Magento_ID as magento_id_parent FROM dbo.MagentoKategoriebaum k1, dbo.MagentoKategoriebaum k3 
        WHERE k1.parentId = k3.KategorieID 
        AND k1.Magento_ID is NULL 
        AND (k1.parentId = 0 
        OR (SELECT Magento_ID FROM dbo.MagentoKategoriebaum k2 
        WHERE k1.parentId = k2.KategorieID) IS NOT NULL)

Das prob dabei ist, das es mir die Eltern zu beginn mit Kategorie_ID 0 nicht anzeigt. SObald diese eine Magento_ID zugewiesen bekommen haben funktioniert alles.

Jemand eine Idee?

2 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
Geschrieben (bearbeitet)

Moin,

hast du ein paar Beispieldatensätze und ein dazu passendes Ergebnis?

PS. Wenn mein Kollege seine Aliase als K1 und K3 benennt, druck ich die Query aus und hau sie ihm um die Ohren :)

Bearbeitet von PVoss
  • 0
Geschrieben
Am 22.10.2018 um 08:52 schrieb PVoss:

PS. Wenn mein Kollege seine Aliase als K1 und K3 benennt, druck ich die Query aus und hau sie ihm um die Ohren :)

Das kann ich nachvollziehen aber hier handelt es sich ja erstmal um einen test denke ich. Da ist alles erlaubt :D

Es könnte schlicht an deinem k1.parentId = 0 liegen. Denn wenn k1.parentId = 0 ist kann er keinen passenden Eintrag in k3 finden (ich gehe mal von einem Fremdschlüsselverhältnis aus)

Ohne testdaten zu haben oder dein genaues Anliegen zu verstehen, könnten die falschen Daten bzw. die 0 ggf. auch etwas mit deinem inner Join zu tun haben? Wenn ich das richtig sehe, willst du die Datensätze inkl. des jeweiligen Parent laden. Da wäre ein LEFT JOIN zwischen k1 und k3 passend. 

SELECT 
	k1.*, 
	k3.Magento_ID as magento_id_parent 
FROM dbo.MagentoKategoriebaum k1
	LEFT JOIN dbo.MagentoKategoriebaum k3
        ON k1.parentId = k3.KategorieID 
WHERE
	k1.Magento_ID is NULL 
    AND 
	(
		k1.parentId = 0 
        OR (
            SELECT 
                Magento_ID 
            FROM dbo.MagentoKategoriebaum k2 
            WHERE k1.parentId = k2.KategorieID
        ) IS NOT NULL
	)

 

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...