Пересобираем technical_issues после расширения базы
Когда база пополняется, витрины нужно пересобрать, иначе отчеты будут смотреть только на старые данные.
DROP TABLE IF EXISTS technical_issues;
CREATE TABLE technical_issues AS
SELECT p.page_id,
p.url,
cp.status_code,
cp.robots_status,
cp.canonical_ok,
cp.word_count,
cp.response_ms,
CASE
WHEN cp.status_code != 200 THEN 'HTTP error'
WHEN cp.robots_status = 'noindex' THEN 'Noindex'
WHEN cp.canonical_ok = 0 THEN 'Canonical problem'
WHEN cp.response_ms > 700 THEN 'Slow response'
WHEN cp.word_count < 500 THEN 'Thin content'
ELSE 'OK'
END AS issue_type
FROM pages AS p
JOIN crawl_pages AS cp ON cp.page_id = p.page_id
WHERE cp.status_code != 200
OR cp.robots_status = 'noindex'
OR cp.canonical_ok = 0
OR cp.response_ms > 700
OR cp.word_count < 500;
DROP TABLE IF EXISTS technical_issues; — Удаляет старую учебную таблицу с таким именем, если она уже была создана раньше.пустая строка — Пустая строка отделяет один смысловой блок кода от другого, чтобы код легче читался.CREATE TABLE technical_issues AS — Создает новую таблицу из результата SELECT-запроса.SELECT p.page_id, — Начинает запрос и перечисляет колонки или выражения, которые нужно вывести.p.url, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.cp.status_code, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.cp.robots_status, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.cp.canonical_ok, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.cp.word_count, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.cp.response_ms, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.CASE — Начинает условную логику: SQLite выберет текст в зависимости от условий.WHEN cp.status_code != 200 THEN 'HTTP error' — Описывает конкретное условие внутри CASE.WHEN cp.robots_status = 'noindex' THEN 'Noindex' — Описывает конкретное условие внутри CASE.WHEN cp.canonical_ok = 0 THEN 'Canonical problem' — Описывает конкретное условие внутри CASE.WHEN cp.response_ms > 700 THEN 'Slow response' — Описывает конкретное условие внутри CASE.WHEN cp.word_count < 500 THEN 'Thin content' — Описывает конкретное условие внутри CASE.ELSE 'OK' — Описывает значение по умолчанию, если ни одно WHEN не подошло.END AS issue_type — Завершает блок CASE и дает имя рассчитанной колонке.FROM pages AS p — Указывает основную таблицу или источник данных для запроса.JOIN crawl_pages AS cp ON cp.page_id = p.page_id — Соединяет текущие данные с другой таблицей по условию ON.WHERE cp.status_code != 200 — Начинает фильтр: дальше перечисляются условия, какие строки оставить.OR cp.robots_status = 'noindex' — Добавляет альтернативное условие: подойдет одно из условий.OR cp.canonical_ok = 0 — Добавляет альтернативное условие: подойдет одно из условий.OR cp.response_ms > 700 — Добавляет альтернативное условие: подойдет одно из условий.OR cp.word_count < 500; — Добавляет альтернативное условие: подойдет одно из условий.technical_issues будет пересчитана с новыми страницами.
Проверьте, что вы работаете в файле seo_lab_from_zero.db, скопировали блок полностью и не потеряли точку с запятой в конце SQL-команды.