Veröffentlicht 22. Oktober 20186 j 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?
22. Oktober 20186 j 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 22. Oktober 20186 j von PVoss
12. November 20186 j 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 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 Konto oder melde dich an, um einen Kommentar zu schreiben.