750 lines
17 KiB
SQL
750 lines
17 KiB
SQL
-- Categories
|
|
|
|
-- get all categories
|
|
|
|
CREATE PROCEDURE getCategories(
|
|
-- variables
|
|
IN language_id INT,
|
|
IN taxonomy_id INT,
|
|
IN site_id INT,
|
|
IN post_id INT,
|
|
IN product_id INT,
|
|
IN count INT,
|
|
IN search CHAR,
|
|
IN type CHAR,
|
|
IN post_type CHAR,
|
|
|
|
-- pagination
|
|
IN start INT,
|
|
IN limit INT,
|
|
|
|
-- return array of categories for categories query
|
|
OUT fetch_all,
|
|
-- return categories count for count query
|
|
OUT fetch_one
|
|
)
|
|
BEGIN
|
|
|
|
SELECT DISTINCT categories.taxonomy_item_id, categories.*, tc.language_id, tc.name, tc.content, tc.slug, tc.content, categories.taxonomy_item_id as array_key
|
|
@IF isset(:count) AND :count
|
|
THEN
|
|
,count(post_id) as count
|
|
END @IF
|
|
|
|
@IF isset(:post_id)
|
|
THEN
|
|
,pt.post_id as checked
|
|
END @IF
|
|
|
|
@IF isset(:product_id)
|
|
THEN
|
|
,pt.product_id as checked
|
|
END @IF
|
|
|
|
FROM taxonomy_item AS categories
|
|
|
|
INNER JOIN taxonomy_to_site t2s ON (categories.taxonomy_item_id = t2s.taxonomy_item_id AND t2s.site_id = :site_id)
|
|
INNER JOIN taxonomy_item_content tc ON (categories.taxonomy_item_id = tc.taxonomy_item_id AND tc.language_id = :language_id)
|
|
INNER JOIN taxonomy t ON (categories.taxonomy_id = t.taxonomy_id)
|
|
|
|
@IF isset(:count) AND :count
|
|
THEN
|
|
|
|
LEFT JOIN post_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id)
|
|
|
|
END @IF
|
|
|
|
@IF isset(:post_id) AND :type == "categories"
|
|
THEN
|
|
|
|
-- LEFT JOIN post_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.post_id = :post_id)
|
|
|
|
END @IF
|
|
|
|
|
|
@IF isset(:post_id) THEN
|
|
|
|
@IF :type == "tags"
|
|
THEN
|
|
|
|
INNER JOIN post_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.post_id = :post_id)
|
|
@ELSE
|
|
|
|
LEFT JOIN post_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.post_id = :post_id)
|
|
|
|
END @IF
|
|
|
|
END @IF
|
|
|
|
@IF isset(:product_id) THEN
|
|
|
|
@IF :type == "tags"
|
|
THEN
|
|
|
|
INNER JOIN product_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.product_id = :product_id)
|
|
@ELSE
|
|
|
|
LEFT JOIN product_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.product_id = :product_id)
|
|
|
|
END @IF
|
|
|
|
END @IF
|
|
|
|
WHERE
|
|
|
|
tc.language_id = :language_id AND t2s.site_id = :site_id
|
|
|
|
@IF isset(:search) && :search
|
|
THEN
|
|
|
|
AND tc.name LIKE :search
|
|
|
|
END @IF
|
|
|
|
@IF isset(:type)
|
|
THEN
|
|
|
|
AND t.type = :type
|
|
|
|
END @IF
|
|
|
|
@IF isset(:post_type)
|
|
THEN
|
|
|
|
AND t.post_type = :post_type
|
|
|
|
END @IF
|
|
|
|
@IF isset(:parent_id)
|
|
THEN
|
|
|
|
AND categories.parent_id = :parent_id
|
|
|
|
END @IF
|
|
|
|
@IF isset(:taxonomy_id)
|
|
THEN
|
|
|
|
AND categories.taxonomy_id = :taxonomy_id
|
|
|
|
END @IF
|
|
|
|
@IF isset(:count) AND :count
|
|
THEN
|
|
GROUP BY categories.taxonomy_item_id, tc.language_id
|
|
END @IF
|
|
|
|
@IF isset(:count) AND :count
|
|
THEN
|
|
ORDER BY count
|
|
@ELSE
|
|
ORDER BY categories.parent_id, categories.sort_order, categories.taxonomy_item_id
|
|
END @IF
|
|
|
|
|
|
@IF isset(:limit) && !empty(:limit)
|
|
THEN
|
|
@SQL_LIMIT(:start, :limit)
|
|
END @IF
|
|
;
|
|
|
|
SELECT count(*) FROM (
|
|
|
|
@SQL_COUNT(categories.taxonomy_item_id, taxonomy_item) -- this takes previous query removes limit and replaces select columns with parameter taxonomy_item_id
|
|
|
|
) as count;
|
|
|
|
|
|
END-- get all categories
|
|
|
|
CREATE PROCEDURE getCategoriesPages(
|
|
|
|
-- variables
|
|
IN language_id INT,
|
|
IN taxonomy_id INT,
|
|
IN site_id INT,
|
|
IN post_id INT,
|
|
IN parent_id INT,
|
|
IN search CHAR,
|
|
IN type CHAR,
|
|
|
|
-- pagination
|
|
IN start INT,
|
|
IN limit INT,
|
|
IN posts_start INT,
|
|
IN posts_limit INT,
|
|
|
|
-- return array of categories for categories query
|
|
OUT affected_rows,
|
|
-- return array of categories for categories query
|
|
OUT fetch_all,
|
|
-- return categories count for count query
|
|
OUT fetch_one
|
|
)
|
|
BEGIN
|
|
|
|
SELECT DISTINCT categories.taxonomy_item_id, categories.*, tc.*, tc.content as content, categories.taxonomy_item_id as array_key
|
|
|
|
@IF isset(:post_id)
|
|
THEN
|
|
,pt.post_id as checked
|
|
END @IF
|
|
|
|
|
|
-- ,(SELECT CONCAT('[', GROUP_CONCAT('{"post_id":"', pc.post_id, '","slug":"' , pc.slug,'","sort_order":"' , p.sort_order, '","name":"' , pc.name, '"}'), ']')
|
|
,(SELECT json_agg(json_build_object('post_id',pc.post_id,'slug',pc.slug,'slug',pc.slug,'sort_order',p.sort_order,'name',pc.name))
|
|
FROM post_content pc
|
|
LEFT JOIN post p ON (pc.post_id = p.post_id)
|
|
LEFT JOIN post_to_taxonomy_item ptt ON (ptt.taxonomy_item_id = categories.taxonomy_item_id AND ptt.post_id = p.post_id)
|
|
WHERE ptt.taxonomy_item_id = categories.taxonomy_item_id ORDER BY p.sort_order
|
|
) AS post
|
|
|
|
FROM taxonomy_item AS categories
|
|
|
|
INNER JOIN taxonomy_to_site t2s ON (categories.taxonomy_item_id = t2s.taxonomy_item_id AND t2s.site_id = :site_id)
|
|
INNER JOIN taxonomy_item_content tc ON (categories.taxonomy_item_id = tc.taxonomy_item_id AND tc.language_id = :language_id)
|
|
INNER JOIN taxonomy t ON (categories.taxonomy_id = t.taxonomy_id)
|
|
|
|
@IF isset(:post_id) AND :type == "categories"
|
|
THEN
|
|
|
|
-- LEFT JOIN post_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.post_id = :post_id)
|
|
|
|
END @IF
|
|
|
|
@IF isset(:post_id) AND :type == "tags"
|
|
THEN
|
|
|
|
INNER JOIN post_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.post_id = :post_id)
|
|
@ELSE
|
|
|
|
LEFT JOIN post_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id)
|
|
|
|
END @IF
|
|
|
|
WHERE
|
|
|
|
tc.language_id = :language_id AND t2s.site_id = :site_id
|
|
|
|
@IF isset(:search)
|
|
THEN
|
|
|
|
AND tc.name LIKE :search
|
|
|
|
END @IF
|
|
|
|
@IF isset(:type)
|
|
THEN
|
|
|
|
AND t.type = :type
|
|
|
|
END @IF
|
|
|
|
@IF isset(:taxonomy_id)
|
|
THEN
|
|
|
|
AND categories.taxonomy_id = :taxonomy_id
|
|
|
|
END @IF
|
|
|
|
@IF isset(:parent_id)
|
|
THEN
|
|
|
|
AND categories.parent_id = :parent_id
|
|
|
|
END @IF
|
|
|
|
|
|
ORDER BY categories.parent_id, categories.sort_order, categories.taxonomy_item_id
|
|
|
|
@IF isset(:limit) && !empty(:limit)
|
|
THEN
|
|
@SQL_LIMIT(:start, :limit)
|
|
END @IF
|
|
;
|
|
|
|
SELECT count(*) FROM (
|
|
|
|
@SQL_COUNT(categories.taxonomy_item_id, taxonomy_item) -- this takes previous query removes limit and replaces select columns with parameter taxonomy_item_id
|
|
|
|
) as count;
|
|
|
|
|
|
END
|
|
|
|
-- get one taxonomy_item
|
|
|
|
CREATE PROCEDURE getCategory(
|
|
IN taxonomy_item_id INT,
|
|
IN post_id INT,
|
|
IN product_id INT,
|
|
IN post_type CHAR,
|
|
IN type CHAR,
|
|
IN slug CHAR,
|
|
OUT fetch_row
|
|
)
|
|
BEGIN
|
|
-- taxonomy_item
|
|
SELECT *
|
|
FROM taxonomy_item as _ -- (underscore) _ means that data will be kept in main array
|
|
|
|
@IF isset(:post_id) THEN
|
|
|
|
@IF :type == "tags"
|
|
THEN
|
|
|
|
INNER JOIN post_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.post_id = :post_id)
|
|
@ELSE
|
|
|
|
LEFT JOIN post_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.post_id = :post_id)
|
|
|
|
END @IF
|
|
|
|
END @IF
|
|
|
|
@IF isset(:product_id) THEN
|
|
|
|
@IF :type == "tags"
|
|
THEN
|
|
|
|
INNER JOIN product_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.product_id = :product_id)
|
|
@ELSE
|
|
|
|
LEFT JOIN product_to_taxonomy_item pt ON (categories.taxonomy_item_id = pt.taxonomy_item_id AND pt.product_id = :product_id)
|
|
|
|
END @IF
|
|
|
|
END @IF
|
|
|
|
WHERE
|
|
1 = 1
|
|
|
|
@IF isset(:taxonomy_item_id)
|
|
THEN
|
|
|
|
AND _.taxonomy_item_id = :taxonomy_item_id
|
|
|
|
END @IF
|
|
|
|
@IF isset(:post_type)
|
|
THEN
|
|
|
|
AND _.post_type = :post_type
|
|
|
|
END @IF
|
|
|
|
@IF isset(:post_id)
|
|
THEN
|
|
,pt.post_id as checked
|
|
END @IF
|
|
|
|
@IF isset(:product_id)
|
|
THEN
|
|
,pt.product_id as checked
|
|
END @IF
|
|
|
|
LIMIT 1;
|
|
|
|
-- content
|
|
SELECT *, language_id as _ -- (underscore) _ column means that this column (language_id) value will be used as array key when adding row to result array
|
|
FROM taxonomy_item_content
|
|
WHERE taxonomy_item_id = :taxonomy_item_id;
|
|
|
|
|
|
-- SELECT *,taxonomy_item_option_id as _
|
|
-- FROM taxonomy_item_option WHERE taxonomy_item_id = :taxonomy_item_id;
|
|
--@EACH(taxonomy_item_option, taxonomy_item_option_value)
|
|
-- SELECT *, taxonomy_item_option_value_id as _ FROM taxonomy_item_option_value pov
|
|
-- WHERE taxonomy_item_option_id = :taxonomy_item_option[taxonomy_item_option_id];
|
|
|
|
END
|
|
|
|
CREATE PROCEDURE getCategoryBySlug(
|
|
IN taxonomy_item_id INT,
|
|
IN parent_id INT,
|
|
IN language_id INT,
|
|
IN site_id INT,
|
|
IN post_type CHAR,
|
|
IN slug CHAR,
|
|
OUT fetch_row
|
|
)
|
|
BEGIN
|
|
|
|
-- content
|
|
SELECT *, _.name as name -- (underscore) _ column means that this column (language_id) value will be used as array key when adding row to result array
|
|
FROM taxonomy_item_content AS _
|
|
LEFT JOIN taxonomy_item as ti ON (_.taxonomy_item_id = ti.taxonomy_item_id)
|
|
LEFT JOIN taxonomy t ON (ti.taxonomy_id = t.taxonomy_id)
|
|
|
|
@IF isset(:site_id)
|
|
THEN
|
|
LEFT JOIN taxonomy_to_site tt ON (tt.taxonomy_item_id = ti.taxonomy_item_id)
|
|
END @IF
|
|
|
|
WHERE 1 = 1
|
|
|
|
@IF isset(:taxonomy_item_id)
|
|
THEN
|
|
|
|
AND _.taxonomy_item_id = :taxonomy_item_id
|
|
|
|
END @IF
|
|
|
|
@IF isset(:slug)
|
|
THEN
|
|
|
|
AND slug = :slug
|
|
|
|
END @IF
|
|
|
|
@IF isset(:parent_id)
|
|
THEN
|
|
|
|
AND parent_id = :parent_id
|
|
|
|
END @IF
|
|
|
|
@IF isset(:language_id)
|
|
THEN
|
|
|
|
AND language_id = :language_id
|
|
|
|
END @IF
|
|
|
|
@IF isset(:post_type)
|
|
THEN
|
|
|
|
AND t.post_type = :post_type
|
|
|
|
END @IF
|
|
|
|
@IF isset(:site_id)
|
|
THEN
|
|
|
|
AND tt.site_id = :site_id
|
|
|
|
END @IF
|
|
|
|
|
|
LIMIT 1;
|
|
|
|
-- images
|
|
-- SELECT *, taxonomy_item_image_id as _
|
|
-- FROM taxonomy_item_image as images
|
|
-- WHERE taxonomy_item_id = :taxonomy_item_id;
|
|
|
|
-- SELECT *,taxonomy_item_option_id as _
|
|
-- FROM taxonomy_item_option WHERE taxonomy_item_id = :taxonomy_item_id;
|
|
-- @EACH(taxonomy_item_option, taxonomy_item_option_value)
|
|
-- SELECT *, taxonomy_item_option_value_id as _ FROM taxonomy_item_option_value pov
|
|
-- WHERE taxonomy_item_option_id = :taxonomy_item_option[taxonomy_item_option_id];
|
|
|
|
END
|
|
|
|
|
|
|
|
|
|
-- Edit taxonomy_item
|
|
|
|
CREATE PROCEDURE editCategory(
|
|
IN taxonomy_item ARRAY,
|
|
IN taxonomy_item_content ARRAY,
|
|
IN taxonomy_item_id INT,
|
|
OUT insert_id,
|
|
OUT affected_rows
|
|
)
|
|
BEGIN
|
|
|
|
DELETE FROM taxonomy_item_content WHERE taxonomy_item_id = :taxonomy_item_id;
|
|
|
|
@FILTER(:taxonomy_item_content, taxonomy_item_content)
|
|
|
|
@EACH(:taxonomy_item_content)
|
|
INSERT INTO taxonomy_item_content
|
|
|
|
( @KEYS(:each), taxonomy_item_id, meta_title, meta_description, meta_keywords )
|
|
|
|
VALUES ( :each, :taxonomy_item_id, '', '', '' );
|
|
|
|
|
|
-- SELECT * FROM taxonomy_item_option WHERE taxonomy_item_id = :taxonomy_item_id;
|
|
|
|
-- allow only table fields and set defaults for missing values
|
|
@FILTER(:taxonomy_item, taxonomy_item)
|
|
|
|
UPDATE taxonomy_item
|
|
|
|
SET @LIST(:taxonomy_item)
|
|
|
|
WHERE taxonomy_item_id = :taxonomy_item_id
|
|
END
|
|
|
|
|
|
|
|
-- Add new taxonomy_item
|
|
|
|
CREATE PROCEDURE addCategory(
|
|
IN taxonomy_item ARRAY,
|
|
IN taxonomy_item_content ARRAY,
|
|
IN site_id INT,
|
|
OUT fetch_one,
|
|
OUT insert_id,
|
|
OUT insert_id
|
|
)
|
|
BEGIN
|
|
|
|
-- allow only table fields and set defaults for missing values
|
|
:taxonomy_item = @FILTER(:taxonomy_item, taxonomy_item)
|
|
:taxonomy_item_content = @FILTER(:taxonomy_item_content, taxonomy_item_content)
|
|
|
|
INSERT INTO taxonomy_item
|
|
|
|
( @KEYS(:taxonomy_item) )
|
|
|
|
VALUES ( :taxonomy_item ) RETURNING taxonomy_item_id;
|
|
|
|
|
|
INSERT INTO taxonomy_item_content
|
|
|
|
( taxonomy_item_id, @KEYS(:taxonomy_item_content) )
|
|
|
|
VALUES ( @result.taxonomy_item, :taxonomy_item_content );
|
|
|
|
|
|
INSERT INTO taxonomy_to_site
|
|
|
|
( taxonomy_item_id, site_id )
|
|
|
|
VALUES ( @result.taxonomy_item, :site_id );
|
|
|
|
END
|
|
|
|
|
|
|
|
CREATE PROCEDURE getCategoriesAllLanguages(
|
|
|
|
-- variables
|
|
IN language_id INT,
|
|
IN user_group_id INT,
|
|
IN site_id INT,
|
|
IN taxonomy_id INT,
|
|
IN search CHAR,
|
|
IN type CHAR,
|
|
IN post_type CHAR,
|
|
|
|
-- pagination
|
|
IN start INT,
|
|
IN limit INT,
|
|
|
|
-- return array of categories for categories query
|
|
OUT fetch_all,
|
|
-- return categories count for count query
|
|
OUT fetch_one
|
|
)
|
|
BEGIN
|
|
|
|
SELECT *,
|
|
(
|
|
SELECT
|
|
json_agg(json_build_object(
|
|
'language_id', tc.language_id,
|
|
'name' , tc.name,
|
|
'slug' , tc.slug,
|
|
'content' , tc.content,
|
|
'meta_title' , tc.meta_title,
|
|
'meta_description' , tc.meta_description,
|
|
'meta_keywords' , tc.meta_keywords) )
|
|
|
|
FROM taxonomy_item_content as tc
|
|
WHERE
|
|
tc.taxonomy_item_id = categories.taxonomy_item_id GROUP BY tc.taxonomy_item_id
|
|
) as languages
|
|
|
|
FROM taxonomy_item AS categories
|
|
|
|
LEFT JOIN taxonomy_to_site t2s ON (categories.taxonomy_item_id = t2s.taxonomy_item_id)
|
|
LEFT JOIN taxonomy ON (categories.taxonomy_id = taxonomy.taxonomy_id)
|
|
|
|
WHERE
|
|
|
|
t2s.site_id = :site_id
|
|
|
|
@IF isset(:search) && :search
|
|
THEN
|
|
|
|
AND tc.name LIKE :search
|
|
|
|
END @IF
|
|
|
|
@IF isset(:taxonomy_id)
|
|
THEN
|
|
|
|
AND categories.taxonomy_id = :taxonomy_id
|
|
|
|
END @IF
|
|
|
|
@IF isset(:type) && :type
|
|
THEN
|
|
|
|
AND taxonomy.type = :type
|
|
|
|
END @IF
|
|
|
|
@IF isset(:post_type) && :post_type
|
|
THEN
|
|
|
|
AND taxonomy.post_type = :post_type
|
|
|
|
END @IF
|
|
|
|
ORDER BY categories.parent_id, categories.sort_order, categories.taxonomy_item_id
|
|
|
|
@IF isset(:limit) && !empty(:limit)
|
|
THEN
|
|
@SQL_LIMIT(:start, :limit)
|
|
END @IF
|
|
;
|
|
|
|
SELECT count(*) FROM (
|
|
|
|
@SQL_COUNT(categories.taxonomy_item_id, taxonomy_item) -- this takes previous query removes limit and replaces select columns with parameter product_id
|
|
|
|
) as count;
|
|
END
|
|
|
|
|
|
-- Edit menu
|
|
|
|
CREATE PROCEDURE editTaxonomyItem(
|
|
IN taxonomy_item ARRAY,
|
|
IN taxonomy_item_content ARRAY,
|
|
IN taxonomy_item_id INT,
|
|
OUT insert_id
|
|
)
|
|
BEGIN
|
|
|
|
-- allow only table fields and set defaults for missing values
|
|
:taxonomy_item_content_data = @FILTER(:taxonomy_item_content, taxonomy_item_content)
|
|
|
|
@EACH(:taxonomy_item_content_data)
|
|
INSERT INTO taxonomy_item_content
|
|
|
|
( @KEYS(:each), taxonomy_item_id)
|
|
|
|
VALUES ( :each, :taxonomy_item_id)
|
|
ON CONFLICT("taxonomy_item_id","language_id")
|
|
DO UPDATE SET @LIST(:each);
|
|
|
|
-- allow only table fields and set defaults for missing values
|
|
@FILTER(:taxonomy_item, taxonomy_item)
|
|
|
|
UPDATE taxonomy_item
|
|
|
|
SET @LIST(:taxonomy_item)
|
|
|
|
WHERE taxonomy_item_id = :taxonomy_item_id;
|
|
END
|
|
|
|
|
|
|
|
-- Add new menu
|
|
|
|
CREATE PROCEDURE addTaxonomyItem(
|
|
IN taxonomy_item ARRAY,
|
|
IN taxonomy_item_content ARRAY,
|
|
IN site_id INT,
|
|
OUT fetch_one,
|
|
OUT insert_id
|
|
)
|
|
BEGIN
|
|
|
|
-- allow only table fields and set defaults for missing values
|
|
:taxonomy_item_content_data = @FILTER(:taxonomy_item_content, taxonomy_item_content)
|
|
:taxonomy_item_data = @FILTER(:taxonomy_item, taxonomy_item)
|
|
|
|
INSERT INTO taxonomy_item
|
|
|
|
( @KEYS(:taxonomy_item_data) )
|
|
|
|
VALUES ( :taxonomy_item_data ) RETURNING taxonomy_item_id;
|
|
|
|
|
|
INSERT INTO taxonomy_to_site
|
|
|
|
( taxonomy_item_id , site_id )
|
|
|
|
VALUES ( @result.taxonomy_item, :site_id );
|
|
|
|
@EACH(:taxonomy_item_content_data)
|
|
INSERT INTO taxonomy_item_content
|
|
|
|
( taxonomy_item_id, @KEYS(:each) )
|
|
|
|
VALUES ( @result.taxonomy_item, :each );
|
|
|
|
|
|
END
|
|
|
|
-- Reorder menu items
|
|
|
|
CREATE PROCEDURE updateTaxonomyItems(
|
|
IN taxonomy_items ARRAY,
|
|
OUT insert_id
|
|
)
|
|
BEGIN
|
|
|
|
:taxonomy_item_data = @FILTER(:taxonomy_items, taxonomy_item)
|
|
|
|
@EACH(:taxonomy_item_data)
|
|
UPDATE taxonomy_item
|
|
|
|
SET @LIST(:each)
|
|
|
|
WHERE taxonomy_item_id = :each.taxonomy_item_id;
|
|
|
|
END
|
|
|
|
-- Delete menu item
|
|
|
|
CREATE PROCEDURE deleteTaxonomyItem(
|
|
IN taxonomy_item_id ARRAY,
|
|
OUT insert_id
|
|
)
|
|
BEGIN
|
|
|
|
-- delete taxonomy_item_content
|
|
DELETE FROM taxonomy_item_content WHERE taxonomy_item_id IN (
|
|
WITH RECURSIVE tree AS (
|
|
SELECT taxonomy_item_id,
|
|
parent_id
|
|
FROM taxonomy_item
|
|
WHERE taxonomy_item_id IN(:taxonomy_item_id)
|
|
|
|
UNION ALL
|
|
|
|
SELECT p.taxonomy_item_id,
|
|
p.parent_id
|
|
FROM taxonomy_item p
|
|
JOIN tree t ON t.taxonomy_item_id = p.parent_id
|
|
)
|
|
SELECT taxonomy_item_id FROM tree);
|
|
|
|
-- delete taxonomy_item
|
|
DELETE FROM taxonomy_item WHERE taxonomy_item_id IN (
|
|
WITH RECURSIVE tree AS (
|
|
SELECT taxonomy_item_id,
|
|
parent_id
|
|
FROM taxonomy_item
|
|
WHERE taxonomy_item_id IN(:taxonomy_item_id)
|
|
|
|
UNION ALL
|
|
|
|
SELECT p.taxonomy_item_id,
|
|
p.parent_id
|
|
FROM taxonomy_item p
|
|
JOIN tree t ON t.taxonomy_item_id = p.parent_id
|
|
)
|
|
SELECT taxonomy_item_id FROM tree);
|
|
|
|
END
|