Страницы

Поиск по вопросам

среда, 12 февраля 2020 г.

SQL-запрос для массового заполнения таблицы

#sql #запрос


Приветствую, мне надо прописать одну картинку для товаров с id от 1 до 1261

Команда

INSERT INTO `catalogue_productimage` (`id`, `original`, `caption`, `display_order`,
`date_created`, `product_id`)
VALUES (1, 'images/products/2016/09/none.png', '', 0, '2016-09-29 11:07:36', 1);


делает нужное для товара с id 1. Не в ручную же 1261 такой запрос создавать, подскажите,
как автоматизировать.
    


Ответы

Ответ 1



Предполагаю, что у вас есть некая таблица продуктов в которой уже существуют записи с такими id и вы хотите в связанную с ней таблицу изображений вставить указанные строки. Если так, то вы можете написать что то вроде: INSERT INTO `catalogue_productimage` (`id`, `original`, `caption`, `display_order`, `date_created`, `product_id`) select id, 'images/products/2016/09/none.png', '', 0, '2016-09-29 11:07:36', id from products where id between 1 and 1261 Если такой таблицы нет, то можно воспользоваться самой же таблицей catalogue_productimage. Для этого вставляем в нее вашу первую запись, а последующие вставляем несколькими запросами вроде таких (если в таблице изначально только 1 запись): INSERT INTO `catalogue_productimage` (`id`, `original`, `caption`, `display_order`, `date_created`, `product_id`) select id+1, original, caption, display_order, date_created, id+1 from catalogue_productimage; INSERT INTO `catalogue_productimage` (`id`, `original`, `caption`, `display_order`, `date_created`, `product_id`) select id+2, original, caption, display_order, date_created, id+2 from catalogue_productimage; INSERT INTO `catalogue_productimage` (`id`, `original`, `caption`, `display_order`, `date_created`, `product_id`) select id+4, original, caption, display_order, date_created, id+4 from catalogue_productimage; Фокус в том, что каждый последующий запрос создает в 2 раза больше записей, чем предыдущий, таким образом что бы дойти до значений около 1261 нам понадобится не более 11 таких запросов. Запросы отличаются друг от друга только прибавлением к ID очередной степени двойки. В последнем запросе нам надо будет ограничить максимальный id, запрос тогда получит условие where id<=1261-1024.

Комментариев нет:

Отправить комментарий