SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 29.08.2011 15:07:03

Tartyga
Участник
Зарегистрирован: 04.05.2011
Сообщений: 9

INSERT OR UPDATE

Таблица (users):
id
list_id
code
name
phone

UNIQUE KEY `un_phone` (`list_id`,`code`)

Задача в следующем:
Импорт записей людей с конт. данными.
INSERT INTO `users` (`list_id`,`code`,`name`,`phone`) VALUES (val_1),(val_2),(val_n) ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `phone` = VALUES(`phone`)

В случае дублирования ключа и обновлении записи, если поле phone пустое данные обновлять, если поле уже имеет значение, необходимо выполнить проверку и в случае если новый телефон не совпадает с предыдущим не обновлять данные и вернуть порядковый номер вставляемой записи.

На сколько я понимаю, данную процедуру можно выполнить с помощью хранимой функции??

Неактивен

 

#2 29.08.2011 15:47:53

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

Re: INSERT OR UPDATE

Tartyga написал:

На сколько я понимаю, данную процедуру можно выполнить с помощью хранимой функции??

Можно.

Неактивен

 

#3 29.08.2011 16:30:03

Tartyga
Участник
Зарегистрирован: 04.05.2011
Сообщений: 9

Re: INSERT OR UPDATE

vasya написал:

Tartyga написал:

На сколько я понимаю, данную процедуру можно выполнить с помощью хранимой функции??

Можно.

Как? Кэп!

Неактивен

 

#4 30.08.2011 11:32:59

Tartyga
Участник
Зарегистрирован: 04.05.2011
Сообщений: 9

Re: INSERT OR UPDATE

Подскажите в какую сторону рыть!)

Добавлять записи в цикле не приемлемо, слишком много запросов получится.
Необходимо получить результаты выполнения запроса.
На выходе должен получится порядковый номер записи и код результата, к примеру 1:запись обновилась, 0:ошибка обновления.

Неактивен

 

#5 30.08.2011 18:45:36

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: INSERT OR UPDATE

mysql_affected_rows — Возвращает число затронуиых прошлой операцией рядов.
http://php.net/manual/ru/function.mysql … d-rows.php

В вашем случае при новой записи будет возвращать 1 , а при обновлённой 2.
Порядковый номер можно получить только в случае новой записи с помощью mysql_insert_id
Для обновлённой записи придётся делать дополнительный SELECT

Неактивен

 

#6 31.08.2011 10:04:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: INSERT OR UPDATE

Ну и касательно изначальной задачи — если Вы действительно хотите экономить
на запросах (зачем?), прийдется сначала вставить в такую же, но пустую таблицу,
а потом пройтись объединением для нахождения случаев «телефон есть, но не сов-
падает». Потому что Вы хотите id таких строк выбрать одним запросом smile

Неактивен

 

Board footer

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