Autor Zpráva
tatyalien
Profil *
Dobrý den,
mám dotaz, snažím se dostat data do mysql z csv oddělené středníkem, data tam dostanu, ale stane se mě u "některých" že se data rozseknout a vložej jako 2 záznamy a to pak rozhodí strukturu tabulky. Existuje nějaké ošetření, nebo kontrola, zda se daný řádek vložil správně? Soubor, který tahám je velký, má cca 9megabajtů - dtb webového obchodu (mám již na správu obchodu excelovské řešení + makra, ale to trvá kolem 10-20min, chtěl bych to zkusit pomocí php a mysql).

Popřípadě pokud máte nějaké elegantní řešení jak převzít data z csv do tabulky nebudu se tomu bránit.

používám kód viz přiložené soubory
php skrypt - uložený do txt
Struktura dtb
Zdrojový soubor na vložení do dtb
TomášK
Profil
Já bych řekl, že bude problém s kódováním, ale jen tipuju. Koukni se na
LOAD DATE INFILE
http://dev.mysql.com/doc/refman/5.1/en/load-data.html - mysql umí importovat textové soubory. Oproti tvému řešení to bude mimo jiné dramaticky rychlejší - tipuju, že uvedená data načte cca za sekundu.
tatyalien
Profil *
Díky, už to zkouším, ale mám s tím trochu problémy... hold zatím php tolik neovládám...

tohle mě šlape...
$sql = "LOAD DATA LOCAL INFILE 'C:/xampp/htdocs/www/import_pokus/malo_dat.csv'
INTO TABLE tabulka FIELDS TERMINATED BY ';' ";

ale v csv jsou data, které obsaují jak : ", \, '

když chci z toho vymlátit zatím jen blbý \

$sql = "LOAD DATA LOCAL INFILE 'C:/xampp/htdocs/www/import_pokus/malo_dat.csv'
INTO TABLE tabulka FIELDS TERMINATED BY ';' ENCLOSED BY '\' ESCAPE BY '\\' LINES TERMINATED BY '\r\n'";

tak mě to nefachá... asi jsem blbej, ale netuším jak to udělat :-(
TomášK
Profil
LOAD DATA INFILE '/tmp/src.csv'
INTO TABLE tabulka
CHARACTER SET 'cp1250'
FIELDS 
    TERMINATED BY  ';'
    OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY '"'
LINES 
    TERMINATED BY '\r\n'
IGNORE 1 LINES

- OPTIONALLY, protože ne všechny sloupce jsou uzavřené v uvozovkách (prázdné nejsou), možná to tam být nemusí
- ENCLOSED BY - jsou uzavřené v uvozovkách
- ESCAPED BY - znak, který je před uvozovkama, které neukončují záznam, jsou opět uvozovky
- IGNORE 1 LINES - hlavičku nechcem
- import hlásí warningy, že jsou sloupce příliš malé - některé záznamy mají víc než 1024 znaků v popisu a ořežou se
tatyalien
Profil *
Tak jsem tohle už rozchodil, rozchodil jsem i SELECT * INTO OUTFILE... ale ten neexportuje jmena sloupců.

Když jsem si chtěl napsat vlastní exportační cyklus, tak mám problémy, když v dtb mám v textu středník, a uvozovky, tak v exportovaném souboru mě to pak rozseká zase špatně sloupce (csv oddělené středníkem), divný je, že select * into outfile to dokáže nějak obejít.. :-(

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: