Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] zaimportowanie danych z różną ilością kolumn
Forum PHP.pl > Forum > Bazy danych
M@X
Witam.
Mam plik .txt z paroma tysiącami rekordów w postaci:

START|1|54354|8789789y9|8y789y789gh789|8h89h89|KONIEC
START|2|354|8789789y9|KONIEC
START|3|4|nh9uh89|b78|h7g78|b7g76g78|vgdj9d3|b73bhf788|bn7hr789342|nc7ne89f|nc8e
f9834|8h89h89|KONIEC

jak widzicie ilość kolumn w każdym wierszu jest różna. W jaki sposób zaimportować ten plik do MYSQLa tak żeby pobierał z każdego rekordu dane tylko z pierwszej, trzeciej i np piątej kolumny. ?
JoShiMa
Wczytujesz po jednej linii i rozbijasz ją na tablicę, potem bierzesz te pola co Ci są potrzebne.
  1. <?php
  2. $rekord = 'START|1|54354|8789789y9|8y789y789gh789|8h89h89|KONIEC';
  3. $a_rekord = explode('|',$rekord);
  4. $a_rekord[1];
  5. $a_rekord[3];
  6. $a_rekord[5];
  7. ?>
kitol
O wiele wydajniejsze jest użycie Mysql'owego LOAD DATA.

zakładasz tabelę podobną do tej:

  1. CREATE TABLE `test` (
  2. `c1` varchar(20) collate utf8_polish_ci DEFAULT NULL,
  3. `c2` varchar(20) collate utf8_polish_ci DEFAULT NULL,
  4. `c3` varchar(20) collate utf8_polish_ci DEFAULT NULL,
  5. `c4` varchar(20) collate utf8_polish_ci DEFAULT NULL,
  6. `c5` varchar(20) collate utf8_polish_ci DEFAULT NULL,
  7. `c6` varchar(20) collate utf8_polish_ci DEFAULT NULL
  8. );


później wykonujesz zapytanie w stylu:

  1. LOAD DATA INFILE 'c:/test.txt' INTO TABLE test
  2. FIELDS TERMINATED BY '|'
  3. LINES STARTING BY 'START' TERMINATED BY '\n'


tabelę tą możesz potraktować jako tymczasową, a dane z interesujących cię kolumn przenieść do innej. Ładowanie przez wielokrotne wykonywanie INSERTÓW za pomocą pętli w PHP jest kilkakrotnie wolniejsze. Poza tym mySQL radzi sobie z dużymi plikami. Link do manuala tu
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.