Шаг 074. Создаем таблицу technical_issues

sqlГлава 6. Создаем новые таблицы из имеющихся

Что делаем

Создаем таблицу technical_issues

Зачем SEO-специалисту

Собираем отдельную таблицу проблем: 404, noindex, canonical, медленные страницы и thin content.

Код. Вставьте 1 в 1

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;

Построчный разбор: что делает, для чего и как работает

Строка 1: DROP TABLE IF EXISTS technical_issues; — Удаляет старую учебную таблицу с таким именем, если она уже была создана раньше.
Строка 2: пустая строка — Пустая строка отделяет один смысловой блок кода от другого, чтобы код легче читался.
Строка 3: CREATE TABLE technical_issues AS — Создает новую таблицу из результата SELECT-запроса.
Строка 4: SELECT p.page_id, — Начинает запрос и перечисляет колонки или выражения, которые нужно вывести.
Строка 5: p.url, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.
Строка 6: cp.status_code, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.
Строка 7: cp.robots_status, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.
Строка 8: cp.canonical_ok, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.
Строка 9: cp.word_count, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.
Строка 10: cp.response_ms, — Продолжает текущую SQL-команду: задает колонку, выражение, условие или значение.
Строка 11: CASE — Начинает условную логику: SQLite выберет текст в зависимости от условий.
Строка 12: WHEN cp.status_code != 200 THEN 'HTTP error' — Описывает конкретное условие внутри CASE.
Строка 13: WHEN cp.robots_status = 'noindex' THEN 'Noindex' — Описывает конкретное условие внутри CASE.
Строка 14: WHEN cp.canonical_ok = 0 THEN 'Canonical problem' — Описывает конкретное условие внутри CASE.
Строка 15: WHEN cp.response_ms > 700 THEN 'Slow response' — Описывает конкретное условие внутри CASE.
Строка 16: WHEN cp.word_count < 500 THEN 'Thin content' — Описывает конкретное условие внутри CASE.
Строка 17: ELSE 'OK' — Описывает значение по умолчанию, если ни одно WHEN не подошло.
Строка 18: END AS issue_type — Завершает блок CASE и дает имя рассчитанной колонке.
Строка 19: FROM pages AS p — Указывает основную таблицу или источник данных для запроса.
Строка 20: JOIN crawl_pages AS cp ON cp.page_id = p.page_id — Соединяет текущие данные с другой таблицей по условию ON.
Строка 21: WHERE cp.status_code != 200 — Начинает фильтр: дальше перечисляются условия, какие строки оставить.
Строка 22: OR cp.robots_status = 'noindex' — Добавляет альтернативное условие: подойдет одно из условий.
Строка 23: OR cp.canonical_ok = 0 — Добавляет альтернативное условие: подойдет одно из условий.
Строка 24: OR cp.response_ms > 700 — Добавляет альтернативное условие: подойдет одно из условий.
Строка 25: OR cp.word_count < 500; — Добавляет альтернативное условие: подойдет одно из условий.

Что должно получиться

Появится таблица technical_issues с техническими проблемами.

Если появилась ошибка

Проверьте, что вы работаете в файле seo_lab_from_zero.db, скопировали блок полностью и не потеряли точку с запятой в конце SQL-команды.