|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Доброго всем! Есть проблема с составлением запроса. Ситуация такая, есть большое количество пар sku-price, но как вы понимаете это данные товаров, и их количество может достигать 11к. соответственно мне надо сделать update уже существующей таблички, если бы пар значений было скажем 5, было бы просто: "UPDATE product SET price = $price WHERE sku = $sku" Но их много, я так понимаю нужен подготовленный запрос и каким то образом(циклом?) добавлять туда пары значений, нашел схожу тему 14578749 с ответом, я разобрался с функциями, но мне не хватает знаний sql что бы переделать под свои задачи соответственно прошу помощи ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 23:26 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Где есть это большое количество пар? В файле, в другой таблице в базе? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 02:28 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
L_I_IG, у меня ассоциативный массив вида arr = [ sku => price ] ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 02:43 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Версия MySQL? доступность файловых операций из PHP на хосте, где находится MySQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 07:54 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Akina, sql 5.7.24-27 не совсем понял что имеется ввиду, если работа с файлами на хостинге через php, то да опять же, если правильно понял вопрос, то на том же хостинге что и сайт upd нагуглил basedir, мне выдает /usr/ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 14:53 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Вариантов два. Первый - сформировать из пар (sku-price) подзапрос, и использовать его в запросе. 11 тысяч - немного, за пределы размера пакета (дефолтно 4 Мбайт, но можно и увеличить же ж) авось не улетит. Второй - загрузить сначала эти пары во временную таблицу, потом использовать в запросе. Раз PHP и MySQL на одном инстансе ОС, первый способ предпочтителен. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 15:12 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
dugart L_I_IG, у меня ассоциативный массив вида arr = [ sku => price ] ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 15:38 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
miksoft, получаю json от поставщика, обрабатываю и кидаю в такой массив. если важно, то sku это string, в таблице varchar, а price это float, в табличке decimal(15,4) [0.0000] ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 15:50 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
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]); ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 15:55 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Не, про подготовленные запросы можешь смело забыть. Биндить 22 тыс. параметров - это даже не мазохизм, это хужопее. Рисуй свой набор пар прямо в текст запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 22:26 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Хорошо, не будем биндить параметры:) Но как тогда нарисовать такой запрос? в prepare написать текст запрос где силами php добавить все пары и отправить? я правильно понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 00:01 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 07:36 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Akina, Про UNION то я и не знал, интересный оператор, думал придется строку клеить или типа того:) Спасибо большое! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 16:33 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Лучше бы UNION ALL вместо UNION. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2019, 16:55 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
Слуйчайно наткнулся в доке по 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 18:35 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
miksoft, Вот как раз экспериментирую с этим, а то с union all начинает ругаться что thread_stack превышен ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 18:52 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
dugart, Если значений так много, то я бы предложил их в таблицу поместить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 18:59 |
|
Множественное обновление данных по условию
|
|||
---|---|---|---|
#18+
miksoft, Что вы имеете ввиду? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2019, 20:02 |
|
|
start [/forum/topic.php?fid=47&fpage=28&tid=1828862]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 309ms |
total: | 465ms |
0 / 0 |