Импорт большого объема данных из файла txt в базу

InstantCMS 2.X
#1 23 декабря 2016 в 18:09
Нужно сделать возможность импорта большого объема строк из txt (примерно 50 000), в определенную таблицу.

В админке добавил новый тип контента и теперь нужно массово наполнить сайт данными.

Имеем файл с такими данными

25.07.1947; На улице было пасмурно
26.07.1947; Весь день шел дождь
27.07.1947; Внезапно ударил мороз
28.07.1947; Весь день шел дождь
29.07.1947; Внезапно ударил мороз
30.07.1947; Весь день шел дождь
31.07.1947; Внезапно ударил мороз
01.08.1947; Весь день шел дождь
02.08.1947;
03.08.1947; Весь день шел дождь
04.08.1947; Внезапно ударил мороз
05.08.1947; Весь день шел дождь
06.08.1947;
07.08.1947;
08.08.1947; Внезапно ударил мороз
09.08.1947; Весь день шел дождь
10.08.1947; Внезапно ударил мороз
11.08.1947; Весь день шел дождь
12.08.1947; Внезапно ударил мороз
13.08.1947; Весь день шел дождь
14.08.1947; Внезапно ударил мороз
Нужно что бы данные из первого столбца импортировались в заголовок т.е. в поле 'title'
А данные из второго столбца импортировались как текст в поле 'content'
(Но иногда второй столбец может быть при этом первый столбец должен все равно успешно импортироваться)

При этом как я понимаю в бд еще должны заполнятся поля: slug, seo_keys и seo_desc

Выслушаю в ЛС стоимость и сроки.










Извиняюсь за "корявое" ТЗ :)

Спасибо
#2 23 декабря 2016 в 18:19
GoodNet, интересует "разовая акция" или "многоразовый" компонент?
#3 23 декабря 2016 в 18:23
Loadырь, я не совсем понял ваш вопрос.

Мне этот скрипт потребуется много раз.
50000 строк в файле это я привел как пример объема добавляемых данных за раз.

Данные переодический будут появляться новые и мне нужен скрипт с помощью которого я быстро смогу осуществлять импорт.
#5 23 декабря 2016 в 18:27

instantcms.ru/addons/dumper.html

Loadырь

Да, спасибо. Видел тот "комбайн", не уверен что мне нужен весь функционал который там есть.
#6 23 декабря 2016 в 19:38
Создаём файл php, запускаем, удаляем по окончании работы

  1. <?php
  2. // подключаемся к базе *** заменить соответственно
  3. $host="***";
  4. $user="***";
  5. $pass="***";
  6. $db_name="***";
  7. $link=mysql_connect($host,$user,$pass);
  8. mysql_select_db($db_name,$link);
  9. mysql_query("SET NAMES utf8");
  10. mysql_query("SET CHARACTER SET utf8");
  11.  
  12. // открываем файл
  13. $f = fopen("/путь_до_файла/vash_textovy_file.txt", "r");
  14. // начинаем построчно читать
  15. while(!feof($f)) {
  16. // в цикле создаём массив, в котором элементы делим по точке с запятой
  17. $arr = explode(";",fgets($f));
  18. // и фигачим эти значения в таблицу
  19. $sql = mysql_query("INSERT INTO `vasha_tablica`(`title`, `content`) VALUES ('$arr[0]','$arr[1]')");
  20. // можно даже последить за добавлением в режиме онлайн
  21. if ($sql) {
  22. echo "<p>Данные '.$arr[0].' и '.$arr[1].' успешно добавлены в таблицу.</p>";
  23. } else {
  24. echo "<p>При добавлении '.$arr[0].' и '.$arr[1].' произошла ошибка.</p>";
  25. }
  26. }
  27. // закрываем файл
  28. fclose($f);
  29. ?>
как то так примерно

лучше побить файл на несколько, если слишком много строк

Либо то же самое, но не пишем в базу, а создаём из этого текстового файла файл с корректным SQL-запросом, и расширением .sql, а потом импортируем стандартными средствами phpMyAdmin

А чтобы slug, seo_keys и другие поля в таблице заполнить — нужно знать, откуда их брать))
#7 23 декабря 2016 в 22:33
@dreadmoon, спасибо за помощь!!!

Сам целый день пытался сделать похожий скрипт, но т.к. php плохо знаю столкнулся ошибками и написал сюда...

Ваш скрипт делает то что надо, импортирует в бд данные, но на сайте они не выводятся, хотя в базе появляются.


Методом тестирования пришел к выводу, что бы записи отображались списком на сайте и открывались, нужно так же что бы обязательно заполнялись следующие поля: 'slug' и 'user_id'

Как сделать так что бы в поле 'user_id' прописывалась единица(что значит запись добавлена админом), а в поле 'slug' импортировались те же данные что и в 'title' (что формирует url записи)?



А чтобы slug, seo_keys и другие поля в таблице заполнить — нужно знать, откуда их брать))

@dreadmoon

'slug' это будущий хвост url перед .html это поле нужно заполнять данными из первого столбца
'seo_keys' это нарезка всех слов из второго столбца через запятую
В 'seo_desc' нужно импортировать данные из второго столбца, те же самые что и в content

Написал Вам в лс.
#8 23 декабря 2016 в 22:43
С заполнением поле 'seo_desc' и 'slug' разобрался сам, а вот как заполнять поле 'user_id' не понимаю.

И как сделать нарезку слов для поля 'seo_keys'
#9 23 декабря 2016 в 22:57
отписался в ЛС как нарезать сео_кейс, а про юзер_ид просто так же единичку в запрос подставьте
#10 24 декабря 2016 в 01:35
А народу показать готовое решение? А то так и останется не до темой.
#11 24 декабря 2016 в 08:33
Dost, как будет решение, напишу) там ТС еще не протестировал работотспособность
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.