За последние 24 часа нас посетили 36313 программистов и 1537 роботов. Сейчас ищут 1327 программистов ...

Обновление БД неизвестными значениями

Тема в разделе "Прочие вопросы по PHP", создана пользователем EvelRus, 21 июл 2014.

  1. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Всем привет! Возникла задача обновлять БД sql из MS Access.
    Каждое утро мне присылают *.sql в котором имеются обновления данных в произвольных полях, коих порядка 50.
    например
    Код (Text):
    1. INSERT INTO `Karta` () VALUES ('140001', 'Фамилия', 'ИМЯ', 'ОТЧеСТВО', 'ДОЛЖНОСТЬ', 'тра', 'ля', '2013-12-11 00:00:00', 'Травматология', 'Q67.8', '2013-12-25 00:00:00', 'Травматология', 'Q67.8', 14, 1, 'Улучшение', 'КСпН', 'Рядовой', 'еще цифры', 'адрес', 'документ', 'ля', 'цифры', NULL, '1994-08-12 00:00:00', 'Муж', 'родственники', 'г. Тверь ', 'улица ', '2', NULL, '44', 108, '2013-11-02 00:00:00', 0, 0, NULL, NULL, NULL, 'Первый', '08:00', 'Врожденная деформация грудной клетки', 'есть', 'есть', 'не имеет ', 'в плановом порядке', NULL, NULL, 0, 0, 0, 0, 0, 0, NULL, 'Б', 0, 'ПоСрочной', 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0);
    Собственно вопрос, как производить обновление измененного поля, если они заранее неизвестны? Собственно не чистить же таблицу и обновлять заново, или все же транкейт? База каждый раз присылается полная, а не только изменения.
    Я в нее, пока, изменений не вношу, только делаю статистику, сколько прибыло/убыло и т.д...
     
  2. Terrian

    Terrian Новичок

    С нами с:
    21 июл 2014
    Сообщения:
    1
    Симпатии:
    0
    Считываеш все в массив (только то, что нужно изменить) и циклом генерируешь запрос UPDATE используя ключи.. все!)
     
  3. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    так сначала узнать надо какие поля поменялись, в том то и проблема
    Например поменялось поле с названием отделения, скажем была травма, стала неотложка (
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    обычно в таблице есть первичный ключ, который однозначно идентифицирует запись — в этом его предназначение.
    возможно ты сумеешь обойтись простым insert…on duplicate key update, чтобы накатывать изменения. эта хитрая ж… штука проверяет существует ли уже запись с нужным ПК и потом либо обновляет данные, либо добавляет.
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Попросить экспортировать изменения сразу в SQL-формате не пробовали? Сомневаюсь, что аксесс не умеет.
     
  6. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Хотел бы посмотреть как он будет выбирать изменения в столбцах при количестве строк около 10 000 )
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Fell-x27, так вроде именно в sql и присылают.

    а тебе прям надо знать что именно обновилось? заменить всё целиком это наверное самый простой и безошибочный алгоритм )))
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    У акксеса синтаксис идентичен MySQL? А то не приходилось работать с этой радостью. Так-то даже между MySQL и SQLite есть различия в этом плане.
     
  9. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Конечно есть, к сожалению ( Есть, конечно мысль сделать на девеле подключение к access, но это изврат (
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    накуа? думаю можно подобрать формат выгрузки подходящий для обоих баз - csv или xml.

    Добавлено спустя 50 секунд:
    ну или в скрипт засасывать csv, а из него уже инсерты куячить.
     
  11. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    что-то у меня подозрение, что не надо делать "обновление" поля, а надо "добавление" новой записи. а то так потеряется история болезни.

    а при выдаче текущей "карты" оператору показывать последнюю запись.