У меня есть система CMS, в которой есть таблица карты сайта с отношениями родитель-потомок и таблица содержимого.Иногда я не хочу включать контент в запросы, если соответствующая запись карты сайта или какой-либо из его родителей отключены.
Основная структура таблицы:
tb_Sitemap :id, parent_id, enabled
tb_Content : id, sitemap_id
Поэтому я хочу иметь возможность добавить что-то к моим запросам, например так:
SELECT * FROM tb_Content WHERE {tb_Sitemap.enabled and any or all parents are also enabled}
Я знаю, что мне нужно использовать CTE, но я не уверен, как добавить их в предложение WHERE или как это сделать.
Я предполагаю, что мне нужно сделать что-то подобное, но не уверен, какдобавить к предложению WHERE:
;WITH cte (enabled)
AS
(
SELECT enabled FROM tb_Content WHERE id = tb_Content.sitemap_id
UNION ALL
SELECT CASE WHEN b.enabled != 1 THEN 0 ELSE a.enabled FROM tb_Sitemap a
INNER JOIN cte b ON a.parent_id = b.id
)
SELECT enabled FROM cte
Пример данных:
tb_Sitemap
- id: 1, parent_id: null, включено: 1
- id: 2, parent_id: 1, включено: 1
- id: 3, parent_id: 2, включено: 1
- id: 4, parent_id: 1, включено: 0
- id: 5, parent_id: 4, включено: 1
- id: 6, parent_id: 5, включено: 1
tbl_Content
- sitemap_id: 3 (это будет выглядеть потому, что sitemap_Идентификатор: 3 включен, как и все его родители)
- sitemap_id: 6 (это не будет отображаться, потому что хотя sitemap_id: 6 включен, один из его родителей нет)