powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / обновить множество строк в один запрос
25 сообщений из 29, страница 1 из 2
обновить множество строк в один запрос
    #38370753
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть не обходимость
обновить большое количество записей в один запрос
воспользовался
Код: sql
1.
2.
3.
insert into profiles (`uid`,`name`, `surname`)
   values(10,'first_name', 'last_name')
   on duplicate key update `name`='first_name', `surname`='last_name'


но проблема в том что если у меня есть не сушествуюшие в базе данные мне не нужно из записывать в базу, как сделать только обновления
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38370776
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для обновления записей обычно используется UPDATE.
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38370982
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Да только оне не позвляет обновит в одном запросе значение в множеству записей, тобиш uid = 5 => name=Федя, uid = 6 => name=Петя, uid = 7 => name=Вася
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38370983
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pehsermiksoft,

Да только оне не позвляет обновит в одном запросе значение в множеству записей, тобиш uid = 5 => name=Федя, uid = 6 => name=Петя, uid = 7 => name=ВасяА insert позволяет?
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38370985
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pehsermiksoft,

Да только оне не позвляет обновит в одном запросе значение в множеству записей, тобиш uid = 5 => name=Федя, uid = 6 => name=Петя, uid = 7 => name=Вася
"брэхня" (с)

Код: sql
1.
2.
3.
update T
set name = case uid when 5 then 'Федя' when 6 then 'Петя' when 7 then 'Вася' end
where uid in (5,6,7)
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371033
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112pehsermiksoft,

Да только оне не позвляет обновит в одном запросе значение в множеству записей, тобиш uid = 5 => name=Федя, uid = 6 => name=Петя, uid = 7 => name=Вася
"брэхня" (с)

Код: sql
1.
2.
3.
update T
set name = case uid when 5 then 'Федя' when 6 then 'Петя' when 7 then 'Вася' end
where uid in (5,6,7)



можеш изобразить как это будет с двумя полями `name`, `surname` - впервые вижи такой синтексис (name = case)
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371037
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007pehsermiksoft,

Да только оне не позвляет обновит в одном запросе значение в множеству записей, тобиш uid = 5 => name=Федя, uid = 6 => name=Петя, uid = 7 => name=ВасяА insert позволяет?

да но если еть не сушествушию key он их добавит on duplicate key update
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371051
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
покамись пришла такая фигня в голову
insert into profiles (`uid`,`name`, `surname`)
values('key',-1, 'last_name')
on duplicate key update `name`='first_name', `surname`='last_name';
DELETE FROM profiles WHERE name=-1;
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371056
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, нашел предыдущий топик - 14578749
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371061
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pehserвпервые вижи такой синтексис (name = case) CASE
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371072
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВот, нашел предыдущий топик - 14578749 йатрйона катшерышшка...
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371073
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pehserCygapb-007пропущено...
А insert позволяет?

да но если еть не сушествушию key он их добавит on duplicate key update а можно пример массового обновления по insert? Ни разу не видел....
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371079
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007,

не понял Вашей реакции. Можете перевести?
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371082
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

извиняюсь, просто необычно смотрится... я ж в MySQL новичек... :)
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371094
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007просто необычно смотрится... По сути дела тот же CASE, только "зашитый" в функции.
Как работает быстрее - не сравнивал, т.к. обычно таким образом много записей не меняют.
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371169
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007pehserпропущено...


да но если еть не сушествушию key он их добавит on duplicate key update а можно пример массового обновления по insert? Ни разу не видел....

на пример моей же таблицы поле uid = AUTO_INCREMENT

Код: plaintext
1.
2.
3.
 uid     name         surname 
 1    Гоша        юзер
 2    Вася        лезер

теперь обновляем инфу по пользователям

Код: sql
1.
INSERT INTO `profiles` (`uid`,`name`, `surname`) VALUES ('1','Петя','Admin'),  ('2','Вася','Boss'), ('3','Миша','User')  ON DUPLICATE KEY UPDATE name=value(`name`), surname=value(`surname`)


получим
Код: plaintext
1.
2.
3.
 uid     name         surname 
 1    Петя       Admin
 2    Вася       Bosss
 3    Миша       User
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371170
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftВот, нашел предыдущий топик - 14578749

у меня немного другая ситуация у меня у каждой записи уникальные изменения
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371172
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftCygapb-007просто необычно смотрится... По сути дела тот же CASE, только "зашитый" в функции.
Как работает быстрее - не сравнивал, т.к. обычно таким образом много записей не меняют.

может тогда подскажите как мне обновить 11000 записей
php+mysql
данные берутся из xls
на примере когда делал каждую строку через инсер добовлял время выполнения было 600 сек после инсерта в одну строку время 9 сек
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371184
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pehsermiksoftпропущено...
По сути дела тот же CASE, только "зашитый" в функции.
Как работает быстрее - не сравнивал, т.к. обычно таким образом много записей не меняют.

может тогда подскажите как мне обновить 11000 записей
php+mysql
данные берутся из xls
на примере когда делал каждую строку через инсер добовлял время выполнения было 600 сек после инсерта в одну строку время 9 секЛегко. Делаете вставку во временную таблицу с индексом, потом обновление связки этой таблицы с рабочей.

Может быть, можно и через аналог OpenRowSet из MS SQL, это не знаю...

А про insert values я и забыл
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371438
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007pehserпропущено...


может тогда подскажите как мне обновить 11000 записей
php+mysql
данные берутся из xls
на примере когда делал каждую строку через инсер добовлял время выполнения было 600 сек после инсерта в одну строку время 9 секЛегко. Делаете вставку во временную таблицу с индексом, потом обновление связки этой таблицы с рабочей.

Может быть, можно и через аналог OpenRowSet из MS SQL, это не знаю...

А про insert values я и забыл
С временными таблицами еше не работал,
И как потом их свзать?
можно пример
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371491
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
drop temorary table if exists tmp;
create temorary table tmp(i int primary key,n varchar(100),s varchar(100));
insert t (i,n,s)values(10,'first_name', 'last_name'),...; --импорт из Excel

update w set w.name=i.n, w.surname=i.s
  from worktable w
  join t on t.i=w.uid;
drop temporary table t;
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371492
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в названии промазал :) t==tmp
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371549
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а мне в голову пришло такое решение, отсюда вопрос что будет быстрее (ваш метод стабоицей или мой)
вот какой у меня вариант созрел
добавил в таблиц поле ud
теперь делаем обновление через инсерт
Код: sql
1.
2.
3.
insert into profiles (`uid`,`name`, `surname`, `ud`)
   values(10,'first_name', 'last_name',1)
   on duplicate key update `name`='first_name', `surname`='last_name';


тобиш если запись добавляется то в поле ud пишем 1 если обновляется ничего не пишем,
и теперь удаляем то что добавилось
Код: sql
1.
DELETE FROM profiles WHERE ud=1; 
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371552
pehser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не тот код инсерта вставил
Код: sql
1.
INSERT INTO `profiles` (`uid`,`name`, `surname`,`ud`) VALUES ('1','Петя','Admin',1),  ('2','Вася','Boss',1), ('3','Миша','User',1)  ON DUPLICATE KEY UPDATE `name`=value(`name`), `surname`=value(`surname`)
...
Рейтинг: 0 / 0
обновить множество строк в один запрос
    #38371553
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pehserтеперь делаем обновление через инсерт
...
и теперь удаляем то что добавилосьНе надо так делать! А то потом придете с вопросом "у меня файл БД распух, данные удалил, а он не уменьшился".
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / обновить множество строк в один запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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