+ SQL: `WITH RECURSIVE sub AS (SELECT t.ID, t.PARENT_ID, t.NAME, t.ID AS LEVEL_ID FROM CI_TAXONOMY t UNION ALL SELECT c.ID, c.PARENT_ID, c.NAME, sub.LEVEL_ID FROM CI_TAXONOMY c JOIN sub ON c.PARENT_ID = sub.ID), level AS (SELECT t.ID, t.PROVIDER_ID, t.PARENT_ID, t.NAME, t.PROVIDER_KEY, t.DESCRIPTION, t.PROVIDER_FEE_ID, t.ADVERTISER_ID, t.CREATED, t.UPDATED, t.TARGETABLE, t.STATUS FROM CI_TAXONOMY t JOIN (SELECT DISTINCT LEVEL_ID FROM sub WHERE LOWER(sub.NAME) LIKE CONCAT('%', LOWER($Name), '%')) hit ON hit.LEVEL_ID = t.ID), parents AS (SELECT l.ID AS NODE_ID, p.ID AS CUR_ID, p.PARENT_ID AS NEXT_ID, p.NAME AS NAME, 1 AS DEPTH FROM level l JOIN CI_TAXONOMY p ON p.ID = l.PARENT_ID WHERE l.PARENT_ID IS NOT NULL AND l.PARENT_ID <> 0 UNION ALL SELECT parents.NODE_ID, p.ID AS CUR_ID, p.PARENT_ID AS NEXT_ID, p.NAME AS NAME, parents.DEPTH + 1 AS DEPTH FROM parents JOIN CI_TAXONOMY p ON p.ID = parents.NEXT_ID WHERE parents.NEXT_ID IS NOT NULL AND parents.NEXT_ID <> 0), parent_paths AS (SELECT NODE_ID, JSON_ARRAYAGG(NAME ORDER BY DEPTH ASC) AS PARENT_PATH FROM parents GROUP BY NODE_ID) SELECT l.ID, l.PROVIDER_ID, l.PARENT_ID, l.NAME, l.PROVIDER_KEY, l.DESCRIPTION, l.PROVIDER_FEE_ID, l.ADVERTISER_ID, l.CREATED, l.UPDATED, l.TARGETABLE, l.STATUS, (CASE l.Status WHEN 0 THEN 'Inactive' WHEN 1 THEN 'Active' WHEN 2 THEN 'Archived' ELSE '' END) AS STATUS_NAME, COALESCE(pp.PARENT_PATH, JSON_ARRAY()) AS PARENT_PATH, '' AS PROVIDER_THIRD_PARTY FROM level l LEFT JOIN parent_paths pp ON pp.NODE_ID = l.ID`,
0 commit comments