SQL
x
WITH protections_agg AS (
SELECT
pr.pr_page AS page_id,
GROUP_CONCAT(DISTINCT CONCAT(pr.pr_type, ':', pr.pr_level)) AS protections,
MAX(
CASE
WHEN pr.pr_expiry IS NULL THEN 'infinity'
ELSE pr.pr_expiry
END
) AS expiry_time
FROM page_restrictions pr
WHERE
pr.pr_expiry IS NULL
OR pr.pr_expiry = 'infinity'
OR pr.pr_expiry > NOW()
GROUP BY pr.pr_page
)
SELECT
CASE
WHEN p.page_namespace = 10 THEN 'Шаблон'
WHEN p.page_namespace = 828 THEN 'Модуль'
ELSE 'Другое'
END AS entity_type,
p.page_title AS entity_name,
(
SELECT COUNT(*)
FROM templatelinks tl
INNER JOIN linktarget lt
ON tl.tl_target_id = lt.lt_id
WHERE
lt.lt_title = p.page_title
AND lt.lt_namespace = p.page_namespace
) AS usage_count,
pa.protections,
pa.expiry_time
FROM page p
LEFT JOIN protections_agg pa
ON p.page_id = pa.page_id
WHERE
p.page_namespace IN (10, 828) -- Шаблоны (10) и модули (828)
AND pa.protections IS NULL -- Фильтр по уровню защиты
AND (
-- Фильтр по количеству включений
(
SELECT COUNT(*)
FROM templatelinks tl
INNER JOIN linktarget lt
ON tl.tl_target_id = lt.lt_id
WHERE
lt.lt_title = p.page_title
AND lt.lt_namespace = p.page_namespace
) BETWEEN 250 AND 2000
)
ORDER BY usage_count 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.