Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wlewanie danych do bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
mattie
Witam wszystkich serdecznie i na początek Wesołych Świąt:)

Mam pytanie.
Potrzebuje wlać do bazy danych dane z pliku tekstowego.
Problem w tym, że dane w pliku tekstowym mają taką postać:

Kod
1;1;1;"OWNER"
2;2;2;"OWNER"
3;3;2;"DISPONENT"

itd.

Tabela do której mam to wlać wygląda następująco:
  1. +--------+----------------------+------+-----+---------+-------+
  2. | FIELD | Type | NULL | KEY | DEFAULT | Extra |
  3. +--------+----------------------+------+-----+---------+-------+
  4. | idD | smallint(5) UNSIGNED | YES | | | |
  5. | idK | smallint(5) UNSIGNED | NO | PRI | 0 | |
  6. | nrR | smallint(5) UNSIGNED | NO | PRI | 0 | |
  7. | rodzaj | char(10) | NO | | | |
  8. +--------+----------------------+------+-----+---------+-------+


Problem jest następujący: potrzebuje tak spreparować dane aby wartość w cudzysłowach wlała sie do tabeli bez tych cydzysłowów.
Zastanawiam się teraz czy najpierw muszę tak wyedytować plik aby nie było tych cudzysłowów czy może da się to zrobić jakąś kombinacją w poleceniu LOAD DATA INFILE.
Plik z danymi jest ogromny więc ręczna edycja odpada. Myślę nad jakimś skryptem co to pozmienia ale najlepsze było by polecenie Mysql'a.

Za pomysły z góry dziękuję:)
FiDO
Pomysl juz sam napisales. A jak go zrealizowac to juz sobie mozesz przeczytac na: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
mattie
Hehe dzięki za mobilizację do myślenia:)
Poradziłem sobie po przeczytaniu dokumentacju wszystko się rozjaśniło polecenie:
  1. LOAD DATA INFILE 'disp.txt'
  2. INTO TABLE
  3. dysponuje FIELDS terminated BY ';' OPTIONALLY ENCLOSED BY '"' LINES terminated BY '\n';

załatwiło wszystkie moje utrapienia:)

Zastanawiam się jeszcze tylko co oznaczają ostrzerzenia Warnings powstałe podczas wlewania danych do bazy.
Zdażyło mi się to kilka razy ale wszystkie dane trafiły na swoje miejsce.
FiDO
Jesli mozesz to podaj tresc kilku z nich to moze bedzie mozna cos powiedziec na ten temat. Tak na czuja to moge strzelac, ze gdzies dlugosc danych przekroczyla rozmiar kolumny i bylo info o tym, ze zostalo to przyciete do rozmiaru kolumny.
mattie
Właśnie podejrzewam,że problem leży właśnie w definicji tabeli. Podczas wpuszczania pliku txt do bazy niektóre kolumny tabeli były nie wypełniane i to chyba spowodowało ostrzeżenia. Plik był duży ponad milion wierszy. Sam zapis poszedł szybko tzn ok. 20s ale później przeprowadziłem konwersję z MyISAM do InnoDB i to trwało ponad godzinę. Zastanawiam się czy jesli przed zapisem danych od razu tablice ustawię na type=Innodb zaoszczedzę czas tworzenia bazy czy może spowoduje to wydłużenie czasu wlewania danych. Próbował ktoś może takiej sztuczki??smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.