|
|
|
| дайти пожалуйста мануал по применению данной конструкции ... пример был бы кстати!
P.S. Заранее благодарю. | |
|
|
|
|
|
|
|
для: sidpr
(31.07.2007 в 10:31)
| | работает один в один как insert into
Но в случае, если запись с указанным первичным ключом уже существует в базе, она заменяется на добавляемую. Insert into в этой ситуации завершился бы неудачей. | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 10:34)
| | а то поле которае не должно дублироватся какой у него тип там должен стоять ? | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 11:41)
| | несущественно.
Лишь бы оно было объявлено, как PRIMARY KEY | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 12:38)
| | Тоесть можно тупо поменять insert into на replace into и дублированных записей не будет ? | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 13:03)
| | дублированных по первичному ключу - не будет.
Старые будут всякий раз заменяться новыми.
Если в таблице есть еще какие-то уникальные ключи (не подчиненные первичному) - этот номер не пройдет. | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 13:06)
| | Давайте разберем на примере:
$query2 = "INSERT INTO `test` VALUES (NULL , '$page_id', '$sim', '', '$weight');";
|
Где NULL автоинскримент ...
$sim - забиваются слова... и они не должны повторятся в другом в каждом Id разные записи... | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 13:11)
| | .Пример записей приведите пожалуйста. | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 13:11)
| | И структуру таблицы. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 13:23)
| | И структуру таблицы!
Структура таблицы - это часть дампа. Запрашивается в закладке PMA "Экспорт " | |
|
|
|
|
|
|
|
для: 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 ;
|
| |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 14:40)
| | отсюда мы видим, что первичным ключом является именно id, а не slovo.
И значит серверу нет никаких причин заменять запись при совпадении этих полей. | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 14:42)
| | а как быть неподскажите ? | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 14:45)
| | убрать поле id (или хотя бы первичный ключ и автоинкремент с него)
поставить первичный ключ на поле slovo | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 14:47)
| | а какже ID уникальный ? | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 14:57)
| | Не понял.
Формулируйте, пожалуйста, мысли чуть более развернуто. | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 14:57)
| | . | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 15:12)
| | Проблема в том что мне нужен ID уникальный и при этом поле SLOVO тоже должно быть уникальным! при добавлении записи если в поле SLOVO будет совпадение то его просто обновлять .... | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 15:28)
| | Зачем Вам id?
поле slovo вообще может быть незаполнено? | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 16:14)
| | нет ну по ID я удаляю записи а поле SLOVO мне просто надо чтобьы не дублировало в записях | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 17:08)
| | Окей, по ID Вы удаляете записи.
Тогда зачем Вы генерируете новый id при обновлении уже имеющейся записи?
Получайте id старой записи и выполняйте INSERT относительно этого id.
И второй вариант - избавляйтесь от суррогатного ключа id вообще,
используйте вместо него реальный - slovo
Других вариантов нет. Либо - либо. | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 17:57)
| | Нет уже имеющееся запись не должна просто так обновлятся , она должно обновлятся если только в таблице есть в поле SLOVO два одинаковых слова и если так то обновлять это слово как бы по верх записывать а не создавать еще одно поле с темже словом | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 18:06)
| | >Нет уже имеющееся запись не должна просто так обновлятся
Тогда почему для уже имеющейся записи Вы генерируете новый id? | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 18:22)
| |
INSERT INTO `text` (`id`, `page_id`, `slovo`)
|
проще скажу
id - генерится автоматом для каждого нового поля
мне надо при добавлении новго поля небыло совпадений со старым полем SLOVO | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 18:47)
| | Грубо говоря если вручную перебирать все ID имеющееся в базе и поля slovo из всех имеющихся записей поле slovo должно содержать везде разные значения ... чтобы не дублировалось информация ! | |
|
|
|
|
|
|
|
для: sidPR
(31.07.2007 в 18:47)
| | >id - генерится автоматом для каждого нового поля
Так не генерируйте его автоматом для тех записей, которые уже есть. Берите уже имеющиеся. | |
|
|
|
|
|
|
|
для: Trianon
(31.07.2007 в 18:59)
| | а какже уникальность ID Всех записей ? | |
|
|
|
|
|
|
|
для: sidPR
(01.08.2007 в 10:19)
| | приведите пример с неуникальным набором. | |
|
|
|
|
|
|
|
для: 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 раза... а мне нужно добится того что мол если такое уже есть слово то его просто обновить или не записывать ... | |
|
|
|
|
|
|
|
для: sidPR
(01.08.2007 в 12:28)
| | Откуда Вы берете эти номера?
336 337 339 340?
Если следовать Вашей логике - у всех этих строк должен быть id=336
Тогда если INSERT заменить на REPLACE - таблица окажется из двух строк. | |
|
|
|