SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.07.2014 15:03:23

Osi322
Участник
Зарегистрирован: 04.07.2014
Сообщений: 24

Вопрос по Update и INSERT

Добрый день, нужны советы или направить в нужное русло, вопрос в следующем:
Пример для понимания (таблица):

table_1
-----------
id                 int auto increment
id_store        int
id_equipment int
count           double
------------------

id_store- id определенного склада
id_equipment - id определенного оборудования 
в этой таблице хранится связь склада с оборудованием и его количеством соответственно.

Вопрос:
Например приходит новое оборудование на определенный склад, скажем "склад_1", причем один тип оборудования уже имеется на этом складе и нужно только обновить количество единиц, а другого типа оборудования нету и нужно создать новые записи.

Я пришел только к этому мнению, сначала выгружать все оборудования с данного склада, и заносить их в массив.
Потом сравнивать этот массив с новым приходом где происходит деления на два вида запроса, 1) на insert 2) на update

Так вот можно ли обойти обработку массива, и состряпать такой запрос на языке mysql? какие методы могут помочь, еще мало знаю возможности этого языка, просьба помочь и подсказать, может какие-нибудь условия в нем есть..
Чтобы он сам разбирал какие ему нужно новые записи создать а какие сложить.

Неактивен

 

#2 24.07.2014 17:02:43

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вопрос по Update и INSERT

Неактивен

 

#3 25.07.2014 09:35:00

Osi322
Участник
Зарегистрирован: 04.07.2014
Сообщений: 24

Re: Вопрос по Update и INSERT

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

А задача стоит в том что если нет в двух столбцах одинаковых значений то создаем новое если есть то обновляем его содержимое

к примеру таблица:
a | b | val
1 | 1 | 1
1 | 2 | 1

и следует такое условие если а и b совпадает то обновляем значение val, если же нет то создаем новую строку
соответственно при Insert ... values (1,1,2),(1,3,3);

a и b совпадает складываем значение, а вот второе условие уже не совпадает нужно добавить новую строку..
в результате ответ:
a | b | val
1 | 1 | 3
1 | 2 | 1
1 | 3 | 3

В итоге имеются ли у Insert конструкции по условию?
или я чего то не понимаю..

Отредактированно Osi322 (25.07.2014 09:42:33)

Неактивен

 

#4 27.07.2014 05:49:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вопрос по Update и INSERT

Всё поняли правильно за исключением "в данной задачи уникальный не допускается".
Комбинация (id_store, id_equipment) и есть уникальный ключ в вашей задаче.

http://sqlfiddle.com/#!2/bb354/1

Неактивен

 

#5 28.07.2014 06:46:53

Osi322
Участник
Зарегистрирован: 04.07.2014
Сообщений: 24

Re: Вопрос по Update и INSERT

Спасибо большое за предоставленный рабочий примерsmile.
Теперь понял как это работает.
Но есть еще вопросы на понимание.
Эта форма работает по primary key или уникальному. Как она определяет по какому именно? мы же не указываем явно по каким столбцам.
В данном примере я добавил еще 1 столбец и сделал его primary key с AI, и все работает так как по условию, но по идеи он должен же и по первичному ключу тоже  сравнивать? а по факту только по двум уникальным.
То есть если нет уникальных эта конструкция будет работать только по первичному иначе же по уникальным? правильно понял?

И еще один нюанс, по первому Вашему ответу делал так как и Вы, но у меня ругался sql c с ошибкой Duplicate entry '1' for key 'a'. Таблицу создавал так(create table test (a int, b int, val int)) а ключи уникальные ставил в phpadmin.
Эта ошибка пропала после того как я удалил и снова создал таблицу как написали ВЫ "create table test (a int, b int, val int, unique key (a,b));".
Почему такая особенность, ведь это тот же самый ключ?

Неактивен

 

#6 28.07.2014 11:19:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вопрос по Update и INSERT

1. Эта конструкция работает по всем уникальным ключам (первичный это частный случай уникального и в данном контексте ничем не отличается).

2. Вероятно в пхпадмине вы делали индекс на отдельное поле "а", а в моем примере составной индекс на два поля. Посмотрите FAQ №5

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson