Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Загрузка данных в MsSQL сервер через WEB интерфейс

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
lamer6666
Отправлено: 09 Октября, 2014 - 20:14:23
Post Id


Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Добрый день уважаемые.
Планирую "накидать" ресурс (IIS Server + MsSQL Server) со следующим функционалом:
1. На сайте регистрируется пользователи.
2. После аутентификации, пользователю нужно загрузить свой прайс лист по средствам WEB сервера в MsSQL
3. При повторной загрузке нужно обновлять данные имеющихся позиций прайса, а новые позиции добавлять.

в связи с этим хотелось бы услышать ваше мнение по реализации?
Мне бы главное блок схему реализации в голове нарисовать.


Всем огромное спасибо.
 
 Top
Dastor
Отправлено: 10 Октября, 2014 - 11:08:16
Post Id


Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Окт. 2014  


Помог: 3 раз(а)




Я так понимаю, что больше интересует 2 и 3 пункты?
По MsSQL не подскажу, но что-то подобное делали для Mysql и Oracle. В качестве web-сервера apache/php.

Тезисно опишу.
1. Прайсы в csv. Если это xls/xlsx, то необходимо преобразовать в csv.
Если это csv, пользователю наверное стоит дать выбор обрамляющих кавычек, разделителя, формата даты в файле и т.д. Либо это жестко установить.
Тогда в доке надо указать какой должен быть формат данных в csv.
2. Если прайсы большие, то скорее всего без дополнительной (назовем ее служебной) таблицы не обойтись.
3. Данные сначала загружаются в служебную таблицу. В mysql использовали load data infile, в oracle sqlloader. Думаю в mssql тоже есть что-то подобное.
4. Переносим данные из служебной таблицы в ту где хранятся прайсы.
В mysql используем insert select ... on duplicate key update
В oracle - merge.
В этом случае новые записи будут вставляться, а существующие обновляться. Единственный вопрос: что считать критерием существованием имеющейся позиции (критерий уникальности), чтобы определять какую позицию вставлять, а какую обновлять Скорее всего это будет какой-то уникальный идентификатор позиции, или же совокупность нескольких полей (префикс, название, зона и т.д.). Для mysql в этом случае надо лишь правильно настроить pk/uk.
5. Очищаем служебную таблицу.

Естественно это упрощенное описание. Многие моменты надо еще продумать: например, в п.5 нельзя бездумно транкейтить таблицу, надо удалять только те данные, которые относились к данной загрузке.Или например, что делать если в прайсе несколько одинаковых позиций (одинаковых с точки зрения п.4, цена у них может быть разная)
Можно пойти дальше: после загрузки данных в служебную таблицу, можно отобразить эти данные пользователю с пометкой какие позиции будут обновляться, а какие вставляться.
Также необходимо делать проверку данных, хотя бы примитивную. Например, что в поле дата - действительно дата в нужном формате; на максимальное/минимальное значение; на тип данных и т.д. Опять же это можно показать пользователю, если в файле есть невалидные данные.

Можно в принципе обойтись без служебной таблицы, если прайсы небольшие. В этом случае просто формировать запросы: insert values ... on duplicate key update/merge.

Ну с веб-мордой думаю проблем быть не должно. Сам загрузчик можно сделать из нескольких шагов.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB