Проставить массового категорию для записей в блоге Webasyst
Ниже — несколько удобных вариантов вставки записей в таблицу blog_post_category.
Содержание
1. По одной записи (каждый INSERT отдельно)
INSERT INTO blog_post_category (post_id, category_id) VALUES (334, 4); INSERT INTO blog_post_category (post_id, category_id) VALUES (335, 4); INSERT INTO blog_post_category (post_id, category_id) VALUES (336, 4); -- и т.д.
2. Групповая вставка (несколько значений в одном INSERT)
Более компактно и быстрее — вставлять сразу несколько строк:
INSERT INTO blog_post_category (post_id, category_id) VALUES (334, 4), (335, 4), (336, 4), (337, 4);
3. Автоматическая генерация через рекурсивный CTE (MySQL 8.0+)
Важно: рекурсивные CTE поддерживаются, начиная с MySQL 8.0.
-- Параметры SET @start_id = 334; SET @end_id = 416; SET @cat_id = 4; WITH RECURSIVE seq AS ( SELECT @start_id AS n UNION ALL SELECT n + 1 FROM seq WHERE n + 1 <= @end_id ) INSERT INTO blog_post_category (post_id, category_id) SELECT n, @cat_id FROM seq;
4. Массовая проставка дополнительных параметров (пример для blog_post_params)
Если нужно проставить дополнительные параметры для нескольких записей:
INSERT INTO `blog_post_params` (`post_id`, `name`, `value`) VALUES ('331', 'sale', 'true'), ('332', 'sale', 'true'), ('333', 'sale', 'true'); 5. Дополнительные советы
- Перед массовой вставкой всегда делайте
BEGIN; ... COMMIT;или тестируйте в транзакции, чтобы можно было откатить изменения при ошибке. - Проверьте наличие уникальных ограничений (unique key) в таблице
blog_post_category— если есть, повторные INSERT вызовут ошибки. - Для больших диапазонов лучше использовать батчи (например, по 1k записей), чтобы избежать долгих транзакций и проблем с памятью.
- Если нужно пропускать дубли — используйте
INSERT IGNOREилиINSERT ... ON DUPLICATE KEY UPDATE.
Скопируйте нужный блок SQL и выполните в вашей MySQL-консоли или через клиент. Если хотите — могу подготовить готовый INSERT для конкретного списка ID (вставьте список ID) в том же HTML-формате.