Механизмы объединения или обновления информации на основе нескольких источников всегда напрямую зависят от конкретных условий: от видов данных, объемов, структуры и их исходной формы.
Рассмотрим такую задачу: добавить в имеющуюся таблицу товаров новое поле с ценой. Причем список товаров измеряется сотнями тысяч записей, а данные с ценами имеются в отдельном прайс-листе. Соответственно, нужно сопоставить артикулы товаров и перенести цены товаров в основную таблицу.
В таком случае, сразу же возникает желание сделать все просто и надежно:
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.art = prices.art)
Здесь, "UPDATE products SET" указывает, что выполняется обновление таблицы products. Следующая строка содержит присвоение полю значения, выбранного вторым запросом на выборку. Выборка соответствующего значения осуществляется условием равенства поля art (артикул).
В результате выполнения такого запроса цены будут скопированы для соответствующих (по артикулу) строк. Такой запрос будет выполнен существенно быстрее, чем решение с применением построчной обработки в PHP. А главное, такой подход проще и быстрее.
ID последней записи в базе данных запросом SQL
Сортировка данных в SQL (ORDER BY)
Запросы SQL добавления данных (INSERT)
Тамик
- 19 апреля 2023, 11:08 ↓calls.commentariy = (SELECT city_code.code FROM city_code WHERE calls.direction LIKE city_code."%495%").
Т.е. добавить в таблицу звонков, поле с комментарием, куда впишутся все звонки на Москву. Коды Городов находятся в другой таблице (city_code).
Антон Сенников
- 23 августа 2022, 10:35 ↓Вы верно заметили, это опечатка. Исправил ее. Спасибо за ваше замечание.
useless
- 23 августа 2022, 10:16 ↓ошибка или так надо?
atr или art?
Дуб
- 22 января 2021, 17:48 ↓