2010-11-12 5 views
0

У меня сложная проблема с созданием одного оператора SQL для работы. У меня три таблицы, активные, неактивные и история. Они идентичны, за исключением того, что только поле pointid в active отмечено как первичный ключ.MySQL INSERT ON DUPLICATE UPDATE

Struct: 
-pointid int 
-income_time timestamp 
-outcome_time timestamp 
-receipted_time timestamp 
-type int 
-isack int 

Im вставки запроса в активное использование «INSERT INTO активной (pointid, income_time, outcome_time, receipted_time, тип, isack) VALUES (100, CURRENT_TIMESTAMP, NULL, NULL, 15, 0) на DUPLICATE KEY UPDATE .. ...

и нужна помощь, чтобы построить конец запроса, что он будет функционировать следующим образом:

-если ряд с pointid не существует, сделайте простую вставку
-если она действительно существует, проверьте, type такой же. если есть, ничего не делать
-образный тип сильно, и ack = 0, скопируйте строку в неактивную (и установите для параметра result_time значение CURRENT_TIMESTAMP), затем обновите текущую строку в активном (тип, доход_time, isack).
-if тип if different и ack = 1, скопировать строку в историю (и установить result_time в CURRENT_TIMESTAMP), а затем обновить текущую строку в активном (тип, доход_time, isack).

логически, я думаю, что это может быть возможно с использованием операторов IF, но пока не найдено рабочего решения. Есть идеи?

+0

Почему вы ограничены одним запросом? Простой выбор, за которым следуют соответствующие INSERT, UPDATE или noaction, будет четким и удобочитаемым. –

ответ

0

Я думаю, что это невозможно для одного запроса. Он не может условно обновлять другую таблицу. Вы можете использовать триггер, написать хранимую процедуру или просто иметь разумную схему, которая не требует этого.

+0

при использовании триггеров, как это будет сделано? – Alexander

+0

Вы пишете программу, которая выполняет все эти проверки и делает все эти условные запросы. В SQL. http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html –

Смежные вопросы