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 :: INSERT ... ON DUPLICATE KEY UPDATE (Как правильно?)
Покинул форум
Сообщений всего: 13
Дата рег-ции: Янв. 2008
Помог: 0 раз(а)
Приветствую господа кодеры!
Суть вопроса такова, как использовать INSERT ... ON DUPLICATE KEY UPDATE на моем примере?
Цитата:
CREATE TABLE `demo` (
`id` int(11) NOT NULL auto_increment,
`test` int(11) NOT NULL default '0',
`teni` text NOT NULL,
`opisanie` text NOT NULL,
`dopinfo` text NOT NULL,
`visual` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;
Цитата:
for ($i=0;$i<$base;$i++)
{
$zapros = "SELECT * from `demo` WHERE test=$test";
$result=mysql_query($zapros, $soedinenie) or die('Не могу сделать запрос к базе данных');
if (mysql_affected_rows()==0)
{
$zapros = "insert into `demo` (test, teni, opisanie, dopinfo, visual) VALUES ('$test', '$teni', '$opisanies', '$dopinfos', '$visual')";
$result = mysql_query($zapros, $soedinenie) or die('Не могу сделать запрос к базе данных');
} else {
$zapros = "UPDATE `demo` SET teni='$teni' WHERE test=$test";
$result=mysql_query($zapros, $soedinenie) or die('Не могу сделать запрос к базе данных');
}
}
Уникальные ключи содержаться в test!!!
evgenijj
Отправлено: 03 Января, 2008 - 17:52:01
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Если вы указываете ON DUPLICATE KEY UPDATE (новшество в MySQL 4.1.0), и производится вставка строки, которая вызывает ошибку дублирующегося первичного (PRIMARY) или уникального (UNIQUE) ключа, то вполняется UPDATE старой строки. Например:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
Если a определяется как UNIQUE и уже содержит 1, то тогда вышеуказанная команда будет аналогична следующей:
Если вы указываете ON DUPLICATE KEY UPDATE (новшество в MySQL 4.1.0), и производится вставка строки, которая вызывает ошибку дублирующегося первичного (PRIMARY) или уникального (UNIQUE) ключа, то вполняется UPDATE старой строки. Например:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
Если a определяется как UNIQUE и уже содержит 1, то тогда вышеуказанная команда будет аналогична следующей:
UPDATE table SET c=c+1 WHERE a=1;
Эту статью я видел, она одна на куче сайтов. Насколько я понимаю а - это ID. А вот тут загвоздка, так как уникальность находится в поле test, а не в id.
Цитата:
for ($i=0;$i<$base;$i++)
{
$zapros = "SELECT * from `demo` WHERE test=$test";
$result=mysql_query($zapros, $soedinenie) or die('Не могу сделать запрос к базе данных');
if (!mysql_num_rows($result))
{
$zapros = "insert into `demo` (test, teni, opisanie, dopinfo, visual) VALUES ('$test', '$teni', '$opisanies', '$dopinfos', '$visual')
ON DUPLICATE KEY UPDATE
`teni`=VALUES(`teni`)";
$result = mysql_query($zapros, $soedinenie) or die('Не могу сделать запрос к базе данных');
}
Но в данном случае происходит почему то только вставка, а апдейт не происходит. В чем затык?? Возможно, что в таблицу нужно еще добавить UNIQUE, только какой именно?
evgenijj
Отправлено: 03 Января, 2008 - 19:47:29
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Цитата:
А вот тут загвоздка, так как уникальность находится в поле test, а не в id
Ты вообще читать-то умеешь?
Цитата:
Если вы указываете ON DUPLICATE KEY UPDATE, и производится вставка строки, которая вызывает ошибку дублирующегося первичного (PRIMARY) или уникального (UNIQUE) ключа, то вполняется UPDATE старой строки
Где у тебя указано, что поле test -- UNIQUE?
Цитата:
CREATE TABLE `demo` (
`id` int(11) NOT NULL auto_increment,
`test` int(11) NOT NULL default '0',
`teni` text NOT NULL,
`opisanie` text NOT NULL,
`dopinfo` text NOT NULL,
`visual` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;
Что-то наподобие? Попробую, только у меня сомнения, что код вставки и апдейта будет работать.
evgenijj
Отправлено: 03 Января, 2008 - 21:03:29
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Нирвана пишет:
Попробую, только у меня сомнения, что код вставки и апдейта будет работать
Гм, интересно тебя послушать: "Вот в мануале написано про такую возможность, как ON DUPLICATE KEY. Что-то я сильно сомневаюсь, что эта фигня будет работать. Знаю я этих ребят - разработчиков MySQL: любят приврать..."
Покинул форум
Сообщений всего: 13
Дата рег-ции: Янв. 2008
Помог: 0 раз(а)
evgenijj пишет:
Нирвана пишет:
Попробую, только у меня сомнения, что код вставки и апдейта будет работать
Гм, интересно тебя послушать: "Вот в мануале написано про такую возможность, как ON DUPLICATE KEY. Что-то я сильно сомневаюсь, что эта фигня будет работать. Знаю я этих ребят - разработчиков MySQL: любят приврать..."
А я не про разработчиков MySQL, а про вот это )))))))))))))))))
Ха-ха, ну ты юморист )))))))))))
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.