СтатьиРабота с SQL и базами данных

Копирование в таблицу данных из другой таблицы запросом SQL

Механизмы объединения или обновления информации на основе нескольких источников всегда напрямую зависят от конкретных условий: от видов данных, объемов, структуры и их исходной формы.

Рассмотрим такую задачу: добавить в имеющуюся таблицу товаров новое поле с ценой. Причем список товаров измеряется сотнями тысяч записей, а данные с ценами имеются в отдельном прайс-листе. Соответственно, нужно сопоставить артикулы товаров и перенести цены товаров в основную таблицу.

В таком случае, сразу же возникает желание сделать все просто и надежно:

1. импортируем данные из файла прайс-листа в специально созданную таблицу;

2. создаем PHP обработчик, который циклом выбирает по одной записи из таблицы с ценой и SQL запросом обновляет основную таблицу (по одной или несколько записей).

Минус такого решения в том, что помимо самого переноса данных, нужно еще как-то реализовать выполнение такого кода. Ведь время обработки такой процедуры может быть достаточно длительным, и сервер может просто не позволить выполнить его целиком. Поэтому, придется еще предусмотреть, как можно выполнить эту процедуру в несколько этапов.

В итоге, такое решение создаст нам еще несколько проблем, победив которые мы все же сделаем то, что хотим.

А вот чтобы не создавать себе новых проблем, можно выполнить основную часть этой задачи непосредственно запросом SQL. Конечно здесь так же придется подготовить таблицу с информацией о ценах.

Итак, имеем две таблицы:

1. products с полями: id, art (артикул), product_name (название товара), price (цена);

2. prices с полями: art (артикул), price (цена).

Теперь нужно сформировать запрос на копирование данных, так чтобы значения для полей таблиц брались из таблицы с ценами. А запрос такой, как оказывается, совсем не сложный:

UPDATE products SET
products.price = (SELECT prices.price FROM prices WHERE products.atr = prices.atr)

Здесь, "UPDATE products SET" указывает, что выполняется обновление таблицы products. Следующая строка содержит присвоение полю значения, выбранного вторым запросом на выборку. Выборка соответствующего значения осуществляется условием равенства поля art (артикул).

В результате выполнения такого запроса цены будут скопированы для соответствующих (по артикулу) строк. Такой запрос будет выполнен существенно быстрее, чем решение с применением построчной обработки в PHP. А главное, такой подход проще и быстрее.


Комментарии

Имя:
Текст комментария:
* В комментариях запрещено публиковать рекламные объявления. Сообщения, содержащие ссылки на сторонние ресурсы добавляется в скрытом режиме. Они будут открыты, если не нарушают установленных правил, после проверки.
Защита от спам-роботов (* Обязателельно укажите ответ на простой вопрос ниже.)
Разность чисел шeсть минyс oдин? (цифра)