Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: import TXT -> MySQL
Forum PHP.pl > Forum > Bazy danych > MySQL
stg
Witam

Szukalem w wyszukiwarce i byly tylko tematy o wgrywaniu zawartosci pojedynczego pliku do bazy MySQL, na dodatek o scisle okreslonej strukturze (oddzielone przecinkami, srednikami itp)

Problem polega na tym, ze mam okolo 600 plikow tekstowych o przykladowej nazwie kk353.txt, kk734 itp. Kazdy z tych plikow to normalny plik tekstowy z opisem motocykli (z kropkami i przecinkami, bez srednikow). I nie mam pojecia jak je wgrac automatycznie do MySQL. Wgrywanie reczne oczywiscie odpada, bowiem za duzo czasu to zajmie.

W MySQL mam 4x pola:
- ID (INT), autoincrement
- Nazwa (VARCHAR), ktora stanowi nazwe pliku bez rozszerzenia (np. kk353)
- Opis (TEXT), ktory stanowi zawartosc tego pliku (w tym przypadku pliku kk353)
- Kategoria (VARCHAR), np. czesc plikow jest w kategorii Suzuki, a czesc w Kawasaki

LOAD DATA INFILE wgrywa pojedynczy plik. Laczenie wszystkich plikow w jeden odpada, bo rowniez zabierze to zbyt wiele czasu, a poza tym lepiej jest chyba dodawac mniejsze pliki, prawda?

W jaki sposob mozna to zrobic?
TomASS
Cytat
LOAD DATA INFILE wgrywa pojedynczy plik.

To zrób albo LOAD DATA INFILE w pętli, albo (co jest wolniejsze) zrób tak:

1. Pętle dla wszystkich plików
2. Wczytujesz plik
3. Bierzesz wiersz
4. Rozbijasz go do woli np. explode
5. Wpisujesz do bazy dane Insertem
6. Kolejna linia
7. Kolejny plik
babejsza
Przy założeniu, że wszystkie pliki są w jednym katalogu:

  1. <?php
  2.  
  3. $katalog=opendir("katalog_z_plikami/");
  4. while ($file = readdir($katalog)) {
  5. if ($file!="." and $file!=".."){
  6. $nazwa = explode(".", $file);
  7. mysql_query("LOAD DATA INFILE '$file' INTO TABLE twoja_tabela (Opis) SET Nazwa = '$nazwa[0]'");
  8. }
  9. }
  10.  
  11. ?>


To powinno działać, ale pewien nie jestem bo nie sprawdzałem. Przejżyj sobie dokładniej to load-data

Nie zalapalem o co chodzi z tymi kategoriami. Jeżeli to mają być katalogi o nazwach "Kawasaki", "Suzuki", w których są te pliki txt to zrób jeszcze jedną pętelkę.
dr_bonzo
Pokaz przykladowa zawartosc plikow, czy wszystkie sa w identycznym formacie?

Mozesz najpierw polaczyc pliki w jeden, na linuxie to jest jedno polecenie i potem LOAD DATA IN FILE.
stg
Oki, polaczylem nazwy plikow (oddzielone przecinkami) w jeden plik:
Kod
#!/bin/sh
nazwy=`ls -m`
cat $nazwy > nazwy


A jak polaczyc same opisy w jeden plik z oddzielajacym znakiem? Nie mam talentu do petelek.
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-2025 Invision Power Services, Inc.