Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ON DUPLICATE KEY UPDATE не обновляет запись

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
armancho7777777 Супермодератор
Отправлено: 15 Апреля, 2012 - 13:06:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Всем привет!
Почему этот код добавляет, но не обновляет запись?

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. "INSERT INTO `table_name`
  4.  
  5. (`column1`, `column2`, `column3`)
  6.  
  7. VALUES
  8.  
  9. ('string1', 'string2', 'string3'),
  10. ('string4', 'string5', 'string6'),
  11. ('string7', 'string8', 'string9')
  12.  
  13. ON DUPLICATE KEY UPDATE
  14.  
  15. `column2` = VALUES(`column2`)
  16.  
  17. ", $db);
  18.  

(Отредактировано автором: 15 Апреля, 2012 - 13:06:59)

 
 Top
Мелкий Супермодератор
Отправлено: 15 Апреля, 2012 - 13:32:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Видимо потому, что нет дублирующихся ключей.


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Апреля, 2012 - 13:39:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Мелкий пишет:
Видимо потому, что нет дублирующихся ключей.

Есть.
Я обновляю страницу со скриптом, который всё это делает, предварительно поменяв некоторые значения.

До оновления страницы:

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. "INSERT INTO `tabe_name`
  3. (`artikul`, `product_name`, `price`)
  4. VALUES
  5. ('1111', 'ccccc', '111.11'),
  6. ('2222', 'ccccc', '222.22')
  7. ON DUPLICATE KEY UPDATE
  8. `artikul` = VALUES(`artikul`)
  9.  


После:

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. "INSERT INTO `tabe_name`
  3. (`artikul`, `product_name`, `price`)
  4. VALUES
  5. ('1111', 'aaaaa', '11.11'),
  6. ('2222', 'bbbbb', '22.22')
  7. ON DUPLICATE KEY UPDATE
  8. `artikul` = VALUES(`artikul`)
  9.  

(Отредактировано автором: 15 Апреля, 2012 - 13:44:58)

 
 Top
caballero
Отправлено: 15 Апреля, 2012 - 13:56:25
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




таблица какая myisam или innodb?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Апреля, 2012 - 14:02:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




caballero пишет:
таблица какая myisam или innodb?

myisam
 
 Top
EuGen Администратор
Отправлено: 15 Апреля, 2012 - 14:57:55
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




armancho7777777
Покажите Ваш SHOW CREATE TABLE (подозреваю, что уникальный ключ, созданный Вами - по нескольким колонкам)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
tuareg
Отправлено: 15 Апреля, 2012 - 17:57:02
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




EuGen пишет:
armancho7777777
Покажите Ваш SHOW CREATE TABLE (подозреваю, что уникальный ключ, созданный Вами - по нескольким колонкам)

EuGen MySQL обновит поле,даже если уникальный индекс создан по нескольким колонкам (проверил в myisam правда оба поля были int(11)).
armancho7777777
У Вас по какому полю(-ям) стоит уникальный индекс?

(Отредактировано автором: 15 Апреля, 2012 - 18:13:47)

 
 Top
Мелкий Супермодератор
Отправлено: 15 Апреля, 2012 - 18:17:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




tuareg пишет:
даже если уникальный индекс создан по нескольким колонкам (проверил в myisam).

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

EuGen пишет:
подозреваю, что уникальный ключ, созданный Вами - по нескольким колонкам

Почему-то подозреваю, что его вообще нет Закатив глазки


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 15 Апреля, 2012 - 18:42:33
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




tuareg,
Мелкий пишет:
Но только если все поля, участвующие в индексе, не уникальны одновременно, т.е. есть строка с теми же самыми значениями всех полей индекса.

Именно это и имелось ввиду. Распространенная ошибка. Уникальным в случае множественного индекса должен быть весь кортеж, а не отдельное поле.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
tuareg
Отправлено: 15 Апреля, 2012 - 18:47:15
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




EuGen пишет:
Именно это и имелось ввиду. Распространенная ошибка. Уникальным в случае множественного индекса должен быть весь кортеж, а не отдельное поле.

Улыбка Значит я не понял, что Вы имели ввиду.
P.S Просто для меня очевидно, что понятие "уникальный" означает единственный в своем роде.
 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Апреля, 2012 - 18:57:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Вот сама таблица:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `csv_export` (
  3.   `id` bigint(250) NOT NULL AUTO_INCREMENT,
  4.   `artikul` bigint(250) NOT NULL,
  5.   `product_name` text NOT NULL,
  6.   `price` float NOT NULL,
  7.   PRIMARY KEY (`id`),
  8.   UNIQUE KEY `artikul` (`artikul`)
  9. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  10.  


Запрос 1:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. "INSERT INTO `csv_export`
  3. (`artikul`, `product_name`, `price`)
  4. VALUES
  5. ('1111', 'aaaa', '11.1'),
  6. ('2222', 'bbbb', '22.2')
  7. ON DUPLICATE KEY UPDATE
  8. `artikul` = VALUES (`artikul`)
  9.  


Запрос 2 (который должен обновить):
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. "INSERT INTO `csv_export`
  3. (`artikul`, `product_name`, `price`)
  4. VALUES
  5. ('1111', 'ccccc', '111.11'),
  6. ('2222', 'ddddd', '222.22')
  7. ON DUPLICATE KEY UPDATE
  8. `artikul` = VALUES (`artikul`)
  9.  

(Отредактировано автором: 15 Апреля, 2012 - 19:04:35)

 
 Top
tuareg
Отправлено: 15 Апреля, 2012 - 19:04:36
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




armancho7777777 пишет:

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. "INSERT INTO `csv_export`
  3. (`artikul`, `product_name`, `price`)
  4. VALUES
  5. ('1111', 'ccccc', '111.11'),
  6. ('2222', 'ddddd', '222.22')
  7. ON DUPLICATE KEY UPDATE
  8. `artikul` = VALUES (`artikul`)
  9.  

Все правильно, странно, что еще ошибок не выдает
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  ON DUPLICATE KEY UPDATE
  3.  

Равносильно
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. UPDATE `csv_export` SET `product_name`='ccccc' ,`price`='111.11'
  3. WHERE `artikul`=1111
  4.  

Вот так этот запрос будет преобразовываться.
 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Апреля, 2012 - 19:07:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




tuareg пишет:

Равносильно

CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `csv_export` SET `product_name`='ccccc' ,`price`='111.11'
  2. WHERE `artikul`=1111




Ну и?
Почему не обновляет где WHERE `artikul`=1111

(Отредактировано автором: 15 Апреля, 2012 - 19:10:38)

 
 Top
tuareg
Отправлено: 15 Апреля, 2012 - 19:12:45
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `csv_export` SET `product_name`='ccccc' ,`price`='111.11'
  2. WHERE `artikul`=1111

А с чего он должен их обновлять, если Вы эти поля не указываете.
Я не правильно выразился Растерялся , не равносильно, а возможно только так. Чтобы поля обновилсь
надо
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. "INSERT INTO `csv_export`
  3. (`artikul`, `product_name`, `price`)
  4. VALUES
  5. ('1111', 'ccccc', '111.11'),
  6. ('2222', 'ddddd', '222.22')
  7. ON DUPLICATE KEY UPDATE
  8. `product_name` = VALUES (`product_name`),
  9. `price`=VALUES(`price`)
  10.  

(Отредактировано автором: 15 Апреля, 2012 - 19:13:35)

 
 Top
armancho7777777 Супермодератор
Отправлено: 15 Апреля, 2012 - 19:18:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Аааа, вот как надо Однако
Я думал, что надо указать только поле уникального ключа:
CODE (SQL):
скопировать код в буфер обмена
  1. ON DUPLICATE KEY UPDATE `artikul` = VALUES (`artikul`)

Спасибо tuareg Подмигивание
(Добавление)
EuGen пишет:
Именно это и имелось ввиду. Распространенная ошибка. Уникальным в случае множественного индекса должен быть весь кортеж, а не отдельное поле.

EuGen это и имел в виду? Улыбка
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB