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

Форум MySQL

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

 

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

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

тема: Replace into
 
 автор: sidpr   (31.07.2007 в 10:31)   письмо автору
 
 

дайти пожалуйста мануал по применению данной конструкции ... пример был бы кстати!

P.S. Заранее благодарю.

   
 
 автор: Trianon   (31.07.2007 в 10:34)   письмо автору
 
   для: sidpr   (31.07.2007 в 10:31)
 

работает один в один как insert into

Но в случае, если запись с указанным первичным ключом уже существует в базе, она заменяется на добавляемую. Insert into в этой ситуации завершился бы неудачей.

   
 
 автор: sidPR   (31.07.2007 в 11:41)   письмо автору
 
   для: Trianon   (31.07.2007 в 10:34)
 

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

   
 
 автор: Trianon   (31.07.2007 в 12:38)   письмо автору
 
   для: sidPR   (31.07.2007 в 11:41)
 

несущественно.
Лишь бы оно было объявлено, как PRIMARY KEY

   
 
 автор: sidPR   (31.07.2007 в 13:03)   письмо автору
 
   для: Trianon   (31.07.2007 в 12:38)
 

Тоесть можно тупо поменять insert into на replace into и дублированных записей не будет ?

   
 
 автор: Trianon   (31.07.2007 в 13:06)   письмо автору
 
   для: sidPR   (31.07.2007 в 13:03)
 

дублированных по первичному ключу - не будет.
Старые будут всякий раз заменяться новыми.
Если в таблице есть еще какие-то уникальные ключи (не подчиненные первичному) - этот номер не пройдет.

   
 
 автор: sidPR   (31.07.2007 в 13:11)   письмо автору
 
   для: Trianon   (31.07.2007 в 13:06)
 

Давайте разберем на примере:


$query2 = "INSERT INTO `test` VALUES (NULL , '$page_id', '$sim', '', '$weight');";


Где NULL автоинскримент ...
$sim - забиваются слова... и они не должны повторятся в другом в каждом Id разные записи...

   
 
 автор: Trianon   (31.07.2007 в 13:18)   письмо автору
 
   для: sidPR   (31.07.2007 в 13:11)
 

.Пример записей приведите пожалуйста.

   
 
 автор: Trianon   (31.07.2007 в 13:18)   письмо автору
 
   для: sidPR   (31.07.2007 в 13:11)
 

И структуру таблицы.

   
 
 автор: sidPR   (31.07.2007 в 13:23)   письмо автору
 
   для: Trianon   (31.07.2007 в 13:18)
 


INSERT INTO `text` (`id`, `page_id`, `slovo`) VALUES (208, 3, 'test2'),
(209, 3, 'derr2'),
(210, 4, 'test'),
(211, 4, 'test'),



в полях slovo не должны повторятся слова как например это произошло ID210 и ID211

   
 
 автор: Trianon   (31.07.2007 в 14:16)   письмо автору
 
   для: sidPR   (31.07.2007 в 13:23)
 

И структуру таблицы!
Структура таблицы - это часть дампа. Запрашивается в закладке PMA "Экспорт "

   
 
 автор: sidPR   (31.07.2007 в 14:40)   письмо автору
 
   для: Trianon   (31.07.2007 в 14:16)
 


CREATE TABLE `text` (
  `id` int(11) NOT NULL auto_increment,
  `page_id` int(11) NOT NULL default '0',
  `slovo` varchar(150) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

   
 
 автор: Trianon   (31.07.2007 в 14:42)   письмо автору
 
   для: sidPR   (31.07.2007 в 14:40)
 

отсюда мы видим, что первичным ключом является именно id, а не slovo.
И значит серверу нет никаких причин заменять запись при совпадении этих полей.

   
 
 автор: sidPR   (31.07.2007 в 14:45)   письмо автору
 
   для: Trianon   (31.07.2007 в 14:42)
 

а как быть неподскажите ?

   
 
 автор: Trianon   (31.07.2007 в 14:47)   письмо автору
 
   для: sidPR   (31.07.2007 в 14:45)
 

убрать поле id (или хотя бы первичный ключ и автоинкремент с него)
поставить первичный ключ на поле slovo

   
 
 автор: sidPR   (31.07.2007 в 14:57)   письмо автору
 
   для: Trianon   (31.07.2007 в 14:47)
 

а какже ID уникальный ?

   
 
 автор: Trianon   (31.07.2007 в 15:12)   письмо автору
 
   для: sidPR   (31.07.2007 в 14:57)
 

Не понял.
Формулируйте, пожалуйста, мысли чуть более развернуто.

   
 
 автор: Trianon   (31.07.2007 в 15:12)   письмо автору
 
   для: sidPR   (31.07.2007 в 14:57)
 

.

   
 
 автор: sidPR   (31.07.2007 в 15:28)   письмо автору
 
   для: Trianon   (31.07.2007 в 15:12)
 

Проблема в том что мне нужен ID уникальный и при этом поле SLOVO тоже должно быть уникальным! при добавлении записи если в поле SLOVO будет совпадение то его просто обновлять ....

   
 
 автор: Trianon   (31.07.2007 в 16:14)   письмо автору
 
   для: sidPR   (31.07.2007 в 15:28)
 

Зачем Вам id?
поле slovo вообще может быть незаполнено?

   
 
 автор: sidPR   (31.07.2007 в 17:08)   письмо автору
 
   для: Trianon   (31.07.2007 в 16:14)
 

нет ну по ID я удаляю записи а поле SLOVO мне просто надо чтобьы не дублировало в записях

   
 
 автор: Trianon   (31.07.2007 в 17:57)   письмо автору
 
   для: sidPR   (31.07.2007 в 17:08)
 

Окей, по ID Вы удаляете записи.

Тогда зачем Вы генерируете новый id при обновлении уже имеющейся записи?
Получайте id старой записи и выполняйте INSERT относительно этого id.

И второй вариант - избавляйтесь от суррогатного ключа id вообще,
используйте вместо него реальный - slovo

Других вариантов нет. Либо - либо.

   
 
 автор: sidPR   (31.07.2007 в 18:06)   письмо автору
 
   для: Trianon   (31.07.2007 в 17:57)
 

Нет уже имеющееся запись не должна просто так обновлятся , она должно обновлятся если только в таблице есть в поле SLOVO два одинаковых слова и если так то обновлять это слово как бы по верх записывать а не создавать еще одно поле с темже словом

   
 
 автор: Trianon   (31.07.2007 в 18:22)   письмо автору
 
   для: sidPR   (31.07.2007 в 18:06)
 

>Нет уже имеющееся запись не должна просто так обновлятся

Тогда почему для уже имеющейся записи Вы генерируете новый id?

   
 
 автор: sidPR   (31.07.2007 в 18:47)   письмо автору
 
   для: Trianon   (31.07.2007 в 18:22)
 


INSERT INTO `text` (`id`, `page_id`, `slovo`) 


проще скажу

id - генерится автоматом для каждого нового поля
мне надо при добавлении новго поля небыло совпадений со старым полем SLOVO

   
 
 автор: sidPR   (31.07.2007 в 18:57)   письмо автору
 
   для: sidPR   (31.07.2007 в 18:47)
 

Грубо говоря если вручную перебирать все ID имеющееся в базе и поля slovo из всех имеющихся записей поле slovo должно содержать везде разные значения ... чтобы не дублировалось информация !

   
 
 автор: Trianon   (31.07.2007 в 18:59)   письмо автору
 
   для: sidPR   (31.07.2007 в 18:47)
 

>id - генерится автоматом для каждого нового поля

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

   
 
 автор: sidPR   (01.08.2007 в 10:19)   письмо автору
 
   для: Trianon   (31.07.2007 в 18:59)
 

а какже уникальность ID Всех записей ?

   
 
 автор: Trianon   (01.08.2007 в 10:54)   письмо автору
 
   для: sidPR   (01.08.2007 в 10:19)
 

приведите пример с неуникальным набором.

   
 
 автор: sidPR   (01.08.2007 в 12:28)   письмо автору
 
   для: Trianon   (01.08.2007 в 10:54)
 


CREATE TABLE `text` (
  `id` int(11) NOT NULL auto_increment,
  `page_id` int(11) NOT NULL default '0',
  `slova` varchar(150) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=339 ;



INSERT INTO `text` (`id`, `page_id`, `slova`) VALUES (336, 23, 'softtime.ru'),
(337, 23, 'softtime.ru'),
(338, 23, 'adfadf');
(339, 23, 'softtime.ru'),
(340, 23, 'softtime.ru'),


вот видете пример записи в базу с помощью "INSERT INTO" у меня дублируется слово softtime.ru аж 4 раза... а мне нужно добится того что мол если такое уже есть слово то его просто обновить или не записывать ...

   
 
 автор: Trianon   (01.08.2007 в 13:45)   письмо автору
 
   для: sidPR   (01.08.2007 в 12:28)
 

Откуда Вы берете эти номера?
336 337 339 340?
Если следовать Вашей логике - у всех этих строк должен быть id=336
Тогда если INSERT заменить на REPLACE - таблица окажется из двух строк.

   
Rambler's Top100
вверх

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