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
	)

 

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...