powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Множественное обновление данных по условию
19 сообщений из 19, страница 1 из 1
Множественное обновление данных по условию
    #39887255
dugart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем!
Есть проблема с составлением запроса. Ситуация такая, есть большое количество пар sku-price, но как вы понимаете это данные товаров, и их количество может достигать 11к.
соответственно мне надо сделать update уже существующей таблички,
если бы пар значений было скажем 5, было бы просто:
"UPDATE product SET price = $price WHERE sku = $sku"
Но их много, я так понимаю нужен подготовленный запрос
и каким то образом(циклом?) добавлять туда пары значений, нашел схожу тему 14578749 с ответом, я разобрался с функциями, но мне не хватает знаний sql что бы переделать под свои задачи
соответственно прошу помощи
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887271
L_I_IG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где есть это большое количество пар? В файле, в другой таблице в базе?
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887272
dugart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_I_IG,

у меня ассоциативный массив вида arr = [ sku => price ]
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887303
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия MySQL? доступность файловых операций из PHP на хосте, где находится MySQL?
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887500
dugart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

sql 5.7.24-27
не совсем понял что имеется ввиду, если работа с файлами на хостинге через php, то да
опять же, если правильно понял вопрос, то на том же хостинге что и сайт
upd
нагуглил basedir, мне выдает /usr/
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887509
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариантов два.

Первый - сформировать из пар (sku-price) подзапрос, и использовать его в запросе. 11 тысяч - немного, за пределы размера пакета (дефолтно 4 Мбайт, но можно и увеличить же ж) авось не улетит.

Второй - загрузить сначала эти пары во временную таблицу, потом использовать в запросе.

Раз PHP и MySQL на одном инстансе ОС, первый способ предпочтителен.
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887523
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dugart
L_I_IG,

у меня ассоциативный массив вида arr = [ sku => price ]
А как эти данные в этом массиве оказались?
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887531
dugart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
получаю json от поставщика, обрабатываю и кидаю в такой массив. если важно, то sku это string, в таблице varchar, а price это float, в табличке decimal(15,4) [0.0000]
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887535
dugart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

как будет выглядеть такой подзапрос?
я могу что то такое сообразить

$stmt = $this->connection->prepare("UPDATE product
SET
price= :price
WHERE
sku= :sku
");


$stmt->bindParam(":sku", array_keys($arr[sku]));
$stmt->bindParam(":price", ...$arr[price]);
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887764
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, про подготовленные запросы можешь смело забыть. Биндить 22 тыс. параметров - это даже не мазохизм, это хужопее.
Рисуй свой набор пар прямо в текст запроса.
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887793
dugart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, не будем биндить параметры:)

Но как тогда нарисовать такой запрос?
в prepare написать текст запрос где силами php добавить все пары и отправить? я правильно понял?
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39887847
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
UPDATE product, ( SELECT $price1 AS price, $sku1 AS sku
                  UNION
                  SELECT $price2, $sku2
                  UNION
                  SELECT $price3, $sku3
                  UNION
                  ... 
                  SELECT $priceN, $skuN ) src
SET product.price = src.price 
WHERE product.sku = src.sku
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39888151
dugart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Про UNION то я и не знал, интересный оператор, думал придется строку клеить или типа того:)
Спасибо большое!
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39888165
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше бы UNION ALL вместо UNION.
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39888762
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слуйчайно наткнулся в доке по MariaDB:
https://mariadb.com/kb/en/library/table-value-constructors/ In Unions, Views, and sub-queries, a Table Value Constructor (TVC) allows you to inject arbitrary values into the result-set.
Т.е. вместо кучи SELECT ... UNION ALL ... можно написать один раз VALUES.
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39888769
dugart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Вот как раз экспериментирую с этим, а то с union all начинает ругаться что thread_stack превышен
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39888772
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dugart,

Если значений так много, то я бы предложил их в таблицу поместить.
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39888793
dugart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Что вы имеете ввиду?
...
Рейтинг: 0 / 0
Множественное обновление данных по условию
    #39888795
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dugart
miksoft,

Что вы имеете ввиду?
Сделать в два запроса:
1) INSERT во временную таблицу (если памяти хватает, то лучше на движке MEMORY)
2) UPDATE с использованием временной таблицы
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Множественное обновление данных по условию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]