сравнение двух массивов в csv и sql

Тема в разделе "Базы данных", создана пользователем Izrael, 1 апр 2014.

Модераторы: latteo
  1. Izrael

    Izrael

    Регистр.:
    12 фев 2008
    Сообщения:
    448
    Симпатии:
    57
    Ребят задача такая есть два файла csv и sql .
    в csv есть строки
    11.png

    название товара я его выделил а дальше фотография.

    нужна решение чтоб произвести слияние именно в sql файл , по принципу.
    1. в sql найти такоеже название в данном примере это
    Код:
    INSERT INTO `oc_product_description` (`product_id`, `language_id`, `name`, `description`, `meta_description`, `meta_keyword`, `seo_title`, `seo_h1`, `tag`) VALUES ('20601', '1', '*219   Оберег от неприятностей (в рамке)', '', '', '', '', '', '');
    далее прочитать id строки в данном примере это 20601 и по id уже проверить в другом поле записана ли там картинка

    Код:
    INSERT INTO `oc_product` (`product_id`, `model`, `sku`, `upc`, `ean`, `jan`, `isbn`, `mpn`, `location`, `quantity`, `stock_status_id`, `image`, `manufacturer_id`, `shipping`, `price`, `points`, `tax_class_id`, `date_available`, `weight`, `weight_class_id`, `length`, `width`, `height`, `length_class_id`, `subtract`, `minimum`, `sort_order`, `status`, `date_added`, `date_modified`, `viewed`) VALUES ('20601', '*219', '', '', '', '', '', '', '', '130', '5', 'ТУТ дОЛЖ НА БЫТЬ КАРТИНКА', '0', '1', '259.0000', '0', '0', '2014-03-31', '0.00000000', '1', '0.00000000', '0.00000000', '0.00000000', '1', '1', '1', '1', '1', '2014-04-01 11:04:14', '0000-00-00 00:00:00', '0');
    Если картинки нет! то взять ее из csv и записать sql //

    За реализацию данного проекта, готов заплатить если при условии что все картинки 80% встанет на сайт.
    sql запрос взят из базы MaxyStore 5.

    ЕСЛИ Я НЕ ПОНЯТНО НАПИСАЛ, НО ВЫ МЫСЛЬ УЛОВИЛИ ДОВАЙТЕ СОЗВОНИМСЯ Я ВСЕ ЧЕТКО ОБЪЯСНЮ
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.451
    Симпатии:
    1.244
    csv можно залить в новую временную sql табличку - это умеет делать даже phpmyadmin, но с navicat удобнее.

    Далее применить обычную магию inserta результатом селекта
    Код:
    insert into oc_product(`product_id`, `image`)
     select opd.`product_id`, t.`image` FROM oc_product_description opd
    join temp_csv t ON opd.name = t.name
    Для простоты рекомендую сначала select составить, который будет возвращать желаемые данные, потом просто подставить insert.

    А вот для того чтобы заполнить другие поля в `oc_product` их надо где-то взять...

    Если надо только поменять значение img, то вместо insert надо использовать update, там синтаксис немного другой будет...
     
    Последнее редактирование: 16 апр 2014
  3. tinku

    tinku Создатель

    Регистр.:
    18 сен 2013
    Сообщения:
    31
    Симпатии:
    4
    1. Извините, но глаз режет - правильно писать "нужнО", "НЕПОНЯТНО"(слитно) и "дАвайте". Если Вам пофиг, то хотя бы уважайте других.
    2. По существу вопроса - 2 пути я вижу. первый, как предложил latteo- загоняем csv во временную таблицу и там работаем на уровне скуля, но это не всегда удобно, например когда содержание scv постоянно меняется. Второй - парсим scv средствами php и так-же инсерт на основе селекта и данных парсинга.

    Что именно выбрать и как реализовать зависит от того что именно Вам нужно получить и какими средствами.
     
    dwarf нравится это.
  4. kibermaster

    kibermaster Писатель

    Регистр.:
    5 апр 2012
    Сообщения:
    8
    Симпатии:
    2
    Вероятнее всего, автору нужно только картинки перенести, чтобы не заливать заново. Решение только одно - импортировать и то и другое в mysql и с помощью запросов совместить нужные данные, как собственно и советовал latteo. Парсить sql файл сложно, так как insert может быть множественным. В целом, задача несложная. Судя по "oc_", речь идет об OpenCart.