1

Тема: Замена полей в БД

Здравствуйте.

Хочется заменить цены в БД, т.е. всего два поля (price, price2).
Пробовала сделать дамп - csv нужной таблицы по этим двум полям. Вношу изменения.
Далее пытаюсь импортировать дамп. Указываю файл, csv, добавляю галку "Заместить данные таблицы данными из файла", выбираю поля: id, price, price2.
После импорта в последнюю из дампа строку вносятся изменения, а первые строки, в которые пыталась внести изменения - удаляются.

Подскажите, пожалуйста, в чем я допускаю ошибку.

2

Re: Замена полей в БД

Escolar
А что за поле id? Вероятно в строку с указанным id и вставляются все данные поочередно, отчего последняя строка из дампа оказывается записана. Попробуйте создать csv с полем id.

3 (изменено: Escolar, 2009-04-29 10:02:51)

Re: Замена полей в БД

Hanut сказал:

Escolar
А что за поле id? Вероятно в строку с указанным id и вставляются все данные поочередно, отчего последняя строка из дампа оказывается записана. Попробуйте создать csv с полем id.

Извените, что коряво написала.
В столбце id - указывала номер строки в базе. в файле csv он присутствует.

Попробовала убрать id (т.е. база содержит только поля с ценами).
При импорте этих двух полей выдает следующее:

Импорт успешно завершен, запросов выполнено: 2.

REPLACE INTO `content` ( `price` , `price2` )
VALUES (
'55555', '55555'
)# Затронуто строк: 2

REPLACE INTO `content` ( `price` , `price2` )
VALUES (
'44444', '44444'
)# Затронуто строк: 2

Далее начинаю проверять. Поле со значениями 44444 есть в базе, а поле 55555 исчезло:
"MySQL вернула пустой результат (т.е. ноль строк). "

4

Re: Замена полей в БД

Escolar
Поле id должно быть первичным или уникальным ключом (оператор PRIMARY KEY или UNIQUE), только в этом случае замена с помощью REPLACE будет иметь смысл. Импортировать csv надо с полем id.

5

Re: Замена полей в БД

Хорошо. Проверила что id - первичный.
Добавила в дамп поле с номером id.
Еще раз пробую залить его и результат получаю тот же - изменяется только последняя строка, первые  -  удаляются.

6

Re: Замена полей в БД

Escolar
id должен содержать уникальные значения.
Покажите пример того, что делаете.

7 (изменено: Escolar, 2009-04-30 16:41:51)

Re: Замена полей в БД

1 делаю дамп в csv нужной таблицы по 3 столбцам, для теста делаю дамп с 9 строками.
csv выглядит так:

3;154;156;158
1070;0;0;0
4;0;0;0
3589;0;0;0
9;0;0;0
6814;2748;2666;2506
6816;0;0;0
6819;5265;5107;4800
6820;5623;5454;5127
6855;5460;4900;4340

это поля соотвественно id;price;price2;price3.

http://www.isec.ru/dump.bmp

Далее в импорте в таблицу выбираю файл, формат csv,
параметры - заменить данные таблицы данными из файла,
название столбцов: id,  price, price2, price3
остальное не меняю.
Далее ок -->
Результат:
http://www.isec.ru/dump2.bmp

Далее через поиск ищу по номеру id и выдается ответ, что:

MySQL вернула пустой результат (т.е. ноль строк). (запрос занял 0.0008 сек.)
SQL-запрос:
SELECT *
FROM `content`
WHERE `id` =3
LIMIT 0 , 30

8

Re: Замена полей в БД

Escolar
Покажите структуру таблицы content.

9

Re: Замена полей в БД

http://www.isec.ru/strukt.bmp

10

Re: Замена полей в БД

Escolar
Запрос REPLACE или INSERT не может вставить только некоторые поля. С его помощью можно обновить только все данные в строке. То есть в csv надо сохранять, а затем импортировать все поля таблицы.

Как вариант, написать собственный скрипт с разбором csv и обновлением данных запросом UPDATE.

11

Re: Замена полей в БД

Большое спасибо за помощь. Попробую импортировать все сразу.