Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] zaimportowanie danych z różną ilością kolumn
M@X
post 1.08.2008, 11:04:13
Post #1





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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. ?

Ten post edytował M@X 1.08.2008, 11:05:32


--------------------
"timeo danaos at dona ferentes"
Go to the top of the page
+Quote Post
JoShiMa
post 1.08.2008, 11:37:53
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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. ?>


--------------------
Go to the top of the page
+Quote Post
kitol
post 2.08.2008, 16:06:19
Post #3





Grupa: Zarejestrowani
Postów: 162
Pomógł: 26
Dołączył: 19.01.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 12:57