|
|
|
| Приветствую... Вот такая проблемка у меня.
Мне нужно быстро перенести данные из нескольких таблиц в одну.
Использую,
"INSERT .... SELECT... LIMIT 1" - только 1 запись!!!
но бывают случаи, что по полю `ID` (UNIQUE KEY)
совпадают значения. и выходит ошибка DUPLICATE
тогда надо просто обновить время и изменить значения одного поля.
в этом случаи очень бы помог "ON DUPLICATE KEY UPDATE",
но совместно (с "INSERT .... SELECT...") его вроде нельзя использовать.
Как тут лучше поступить?
Мои вариант:
Я хочу поставить условие, если запрос неудачный, вернул FALSE.
значит возможно ошибка DUPLICATE.
и я просто сделаю отдельный запрос (UPDATE)
но мне надо узнать ключ из-за которого произошла ошибка.
как его можно узнать???
просто, чтоб так его(ключ) получить, надо в условии снова использовать несколько больших таблиц. =(
Или есть какой-нибудь другой более оптимальный вариант? | |
|
|
|
|
|
|
|
|
для: а-я
(24.06.2008 в 12:01)
| | Используйте конструкцию ON DUPLICATE KEY UPDATE оператора INSERT, которая позволяет задать имена обновляемых столбцов. | |
|
|
|
|
|
|
|
для: cheops
(24.06.2008 в 13:55)
| | хммм...
но я же уже использую конструкцию INSERT ... SELECT | |
|
|
|
|
|
|
|
для: а-я
(24.06.2008 в 14:38)
| | Этот оператор также поддерживает конструкцию ON DUPLICATE KEY UPDATE | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: а-я
(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, ... ]
|
| |
|
|
|
|
|
|
|
для: cheops
(26.06.2008 в 01:53)
| | Большое спасибо! То что нужно... все как по маслу! =) | |
|
|
|