Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как лучше решить проблему DUPLICATE?
 
 автор: а-я   (24.06.2008 в 12:01)   письмо автору
 
 

Приветствую... Вот такая проблемка у меня.

Мне нужно быстро перенести данные из нескольких таблиц в одну.

Использую,
"INSERT .... SELECT... LIMIT 1" - только 1 запись!!!

но бывают случаи, что по полю `ID` (UNIQUE KEY)
совпадают значения. и выходит ошибка DUPLICATE
тогда надо просто обновить время и изменить значения одного поля.

в этом случаи очень бы помог "ON DUPLICATE KEY UPDATE",
но совместно (с "INSERT .... SELECT...") его вроде нельзя использовать.

Как тут лучше поступить?

Мои вариант:
Я хочу поставить условие, если запрос неудачный, вернул FALSE.
значит возможно ошибка DUPLICATE.
и я просто сделаю отдельный запрос (UPDATE)
но мне надо узнать ключ из-за которого произошла ошибка.
как его можно узнать???
просто, чтоб так его(ключ) получить, надо в условии снова использовать несколько больших таблиц. =(





Или есть какой-нибудь другой более оптимальный вариант?

   
 
 автор: elenaki   (24.06.2008 в 12:03)   письмо автору
 
   для: а-я   (24.06.2008 в 12:01)
 

http://softtime.ru/forum/read.php?id_forum=3&id_theme=9121

   
 
 автор: cheops   (24.06.2008 в 13:55)   письмо автору
 
   для: а-я   (24.06.2008 в 12:01)
 

Используйте конструкцию ON DUPLICATE KEY UPDATE оператора INSERT, которая позволяет задать имена обновляемых столбцов.

   
 
 автор: а-я   (24.06.2008 в 14:38)   письмо автору
 
   для: cheops   (24.06.2008 в 13:55)
 

хммм...
но я же уже использую конструкцию INSERT ... SELECT

   
 
 автор: cheops   (25.06.2008 в 02:30)   письмо автору
 
   для: а-я   (24.06.2008 в 14:38)
 

Этот оператор также поддерживает конструкцию ON DUPLICATE KEY UPDATE

   
 
 автор: а-я   (25.06.2008 в 07:04)   письмо автору
 
   для: cheops   (25.06.2008 в 02:30)
 

Что-то я не могу сделать... =(

Документация MySQL 5.0.3-alpha
Синтаксис оператора INSERT

    INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] tbl_name [(col_name,...)]
        VALUES (expression,...),(...),...
        [ ON DUPLICATE KEY UPDATE col_name=expression, ... ]

или INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] tbl_name [(col_name,...)]
        SELECT ...

или INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] tbl_name
        SET col_name=(expression | DEFAULT), ...
        [ ON DUPLICATE KEY UPDATE col_name=expression, ... ]


получается я использую 2ой вариант. и я даже не знаю куда вставить ON DUPLICATE KEY UPDATE

   
 
 автор: cheops   (26.06.2008 в 01:53)   письмо автору
 
   для: а-я   (25.06.2008 в 07:04)
 

Посмотрите раздел 13.2.4.1 Официальной документации - синтаксис оператора INSERT ... SELECT, там вы должны обнаружить следующую схему
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

   
 
 автор: а-я   (26.06.2008 в 08:39)   письмо автору
 
   для: cheops   (26.06.2008 в 01:53)
 

Большое спасибо! То что нужно... все как по маслу! =)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования