Сравнение CSV файла и таблицы в базе

zip111

Новичок
Сравнение CSV файла и таблицы в базе

Подскажите алгоритм как лучше сделать.

Ситуация

Принимаем от пользователя CSV-файл, например с такой структурой:

Производитель;Модель;Цена;Гарантия
Samsung;X700;183;12
Siemens;sx1;150;12
Nokia;8800;845;36

И в базе есть таблица с точно такой же структурой.

Задача: сравнить значения цены и гарантии. Там где значение изменилось - меняем на то, что было в цсв-файле. Порядок телефонов в базе и в цсв-файле разный.

Кто что подскажет?

Я предполагаю сделать 2 многомерных массива и сравнивать их. но мне кажется, что это не лучший вариант.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
REPLACE

-~{}~ 12.04.07 22:57:

http://www.mysql.ru/docs/man/REPLACE.html
UNIQUE KEY `phone_full_name` (`phone_brand`,`phone_model`)
 

zip111

Новичок
Видимо не подойдет, так как я условно назвал таблицу "точно такой-же". На самом деле информация собирается в нужном виде посредством нескольких join-ов
 

zip111

Новичок
Румата

Нет, этот вариант отпадает, так как тогда будет 3 таблицы частично совпадать. Данных много, а в моем случае это критично.
 

Румата

Новичок
А чем не нравится вариант с массивами? С массивами объектов типа Телефон с полями : Производитель, Модель, Гарантия, Цена?

PS. Интересная структура базы, когда практически начальные данные приходится клеить из трех таблиц :)

А можно , ради интереса, посмотреть на структуру этих таблиц?
 

zip111

Новичок
Вот немного упрощенная:

Catalogue
id (tinyint)
category (varchar)

Mobile

id (int)
category (tinyint)
title (varchar)
review (text)
count_see (int)

Price

id (int)
id_shop (int)
id_device (int)
price (varchar)
varranty (varchar)
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
[SQL]

REPLACE `phones_table`
VALUES(
(SELECT `brands`.`id`
FROM `brands`
WHERE `brands`.`name`='Имя бренда'),
'селект ай-ди модели телефона', 'цена' , 'гарантия')

[/SQL]

-~{}~ 12.04.07 23:48:

ну и дальше в том-же духе
 

zip111

Новичок
Mr_Max

Не могли бы Вы полностью описать запрос? В мануале, на который Вы дали ссылку, немного абстрактно написано, я недопонял конструкцию.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
zip111
В мануале всё сказано

Цитирую
Оператор REPLACE работает точно так же, как INSERT, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UNIQUE или PRIMARY KEY, что и новая, то старая запись перед занесением новой будет удалена. See section 6.4.3 Синтаксис оператора INSERT.
 

zip111

Новичок
А как быть если мне нужно сделать запросом такое:

если значение в CSV файле отличается от данных в таблицы (его либо нет в таблице, либо оно есть) - тогда данные добавляются\меняются в базе, а если есть значение в таблице, но нету его в CSV файле - то в таблице вся строка удаляется
 

kruglov

Новичок
Вы от пользователя эти CSV получаете настолько много раз в секунду, что никак не можете себе позволить сделать это тремя запросами?

-~{}~ 13.04.07 10:32:

Хм, помечайте перед проверкой все строки как непроверенные. Если строка в CSV есть, помечайте как проверенную. После проверки удаляйте все непроверенные.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
1. UPDATE `table` SET `price=0
2. REPLACE
3. DELETE FROM `table` WHERE `price=0
 
Сверху