SQL
x
WITH RECURSIVE Descendants AS (
-- Начальный запрос: выбираем красные категории (несуществующие категории)
SELECT
cl.cl_to AS root,
cl.cl_to AS cat
FROM categorylinks cl
LEFT JOIN page p ON p.page_title = cl.cl_to
AND p.page_namespace = 14
WHERE p.page_id IS NULL
UNION
-- Рекурсивная часть: находим подкатегории текущей категории
SELECT
d.root,
p.page_title AS cat
FROM Descendants d
INNER JOIN page p ON p.page_namespace = 14
AND p.page_title = d.cat
INNER JOIN categorylinks cl ON cl.cl_to = p.page_title
WHERE (SELECT page_namespace FROM page WHERE page_id = cl.cl_from) = 14
)
SELECT
CONCAT('[[Категория:', CONVERT(d.root USING utf8), ']]') AS CategoryLink, -- Формируем ссылку на корневую категорию
GROUP_CONCAT(DISTINCT CONCAT('[[', CONVERT(p2.page_title USING utf8), ']]') SEPARATOR ', ') AS UsedInPages, -- Список статей в категории и её подкатегориях
COUNT(DISTINCT p2.page_id) AS UsageCount -- Количество статей
FROM Descendants d
INNER JOIN categorylinks cl2 ON cl2.cl_to = d.cat
INNER JOIN page p2 ON p2.page_id = cl2.cl_from
WHERE p2.page_namespace = 0 -- Берём только статьи из основного пространства
GROUP BY d.root
HAVING UsageCount > 0 -- Отбираем только те категории, в которых есть статьи
ORDER BY UsageCount DESC;
By running queries you agree to the Cloud Services Terms of Use and you irrevocably agree to release your SQL under CC0 License.
All SQL code is licensed under CC0 License.