Jump to content
php.lv forumi

CSV uz MySQL


atari

Recommended Posts

Ir CSV fails (1.CSV), fajag tos ierakstus iedabūt datubāzē (db: datubaaze, tabula: test) uzmeklēju sekojošu skriptu:

 

<?php

$connection = mysql_connect("hosts", "vaards", "parole") or die ("Unableto connect to server");

$db = mysql_select_db("datubaaze", $connection) or die ("Unable toselect database");

$fcontents = file ('./1.csv');

for($i=0; $i<sizeof($fcontents); $i++) {

$line = trim($fcontents[$i]);

echo "$line<BR>";

$arr = explode("\"", $line);

echo "$arr";

$sql = "insert into test values (". implode("'", $arr)")";

mysql_query($sql);

echo $sql ."<br>\n";

if(mysql_error()) {

echo mysql_error() ."<br>\n";

}}

?>

 

Jautājums: vai pastāv iespēja, ka ieraksti no CSV faila neatkārtojas tabulā (neierakstas pa jaunu tai datubazes tabulā) pēc katras skripta palaišanas, bet pārbauda teiksim ja ir tāds ieraksts iekš tabulas 'test', tad neko neadara, ja nav tad it kā apdeito to.

Paldies jau ieprieks!

 

p.s. tabulas test izskatas šādi:

 

CREATE TABLE IF NOT EXISTS `test` (

`1` text,

`2` text,

`3` text,

`4` text,

`5` text,

`6` text,

`7` text,

`8` text,

`9` text,

`10` text

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Link to comment
Share on other sites

Vispārīgā gadījumā MySQL CSV failus ērti var ielādēt ar vienu kveriju:

http://dev.mysql.com/doc/refman/5.0/en/load-data.html

 

Jautājums: vai pastāv iespēja, ka ieraksti no CSV faila neatkārtojas tabulā (neierakstas pa jaunu tai datubazes tabulā) pēc katras skripta palaišanas, bet pārbauda teiksim ja ir tāds ieraksts iekš tabulas 'test', tad neko neadara, ja nav tad it kā apdeito to.

Paldies jau ieprieks!

http://dev.mysql.com/doc/refman/5.0/en/ins...-duplicate.html

Link to comment
Share on other sites

Nu par The CSV Storage Engine par kuru "bubu" rakstīja, tur nav piemērs no php puses kā lai izveido to kodu, bet pamainot uz ENGINE = CSV nekas nemainās. Varbūt kādam/ai nesagādā grūtības palabot to kodu, tā lai tie ieraksti nerakstās pa jaunu. Paldies!

Link to comment
Share on other sites

CSV engine nav defaultā iekļauta MySQL, lai iekļautu, tad ir jāpārkompilē.

Jaskatās protams katrs gadījums atsevišķi, bet, ja aplikāciju ir doma likt uz sveša hostinga, tad velns viņu zin, vai tur būs CSV engine pieejama, vai nē.

Edited by codez
Link to comment
Share on other sites

Kāds tur "php pusei" ar kautko sakars? Tā ir tīri MySQL lieta.

Nu kā tad tie dati ierakstās iekš mysql datubāzes? Ar domu spēku, vai ? Esmu iesācejs, bet domāju, ka jāuzraksta kaut kāds kods, kas tiek izpildīts, lai tas ierakstītos datubāzēs palaižot PHP skriptu. Ar to arī domāju "php pusi", kuru lūdzu palabot, no sērijas laikam te ir tā, tipa zinu, bet neteikšu un nah tadam palīdzet, bet di*rst pasūtīt tā kā laikam nav smuki.

Link to comment
Share on other sites

atari, te tiešām nav vajadzīgs PHP.

Paņem consolē, mysqladminā vai mysql query browserī ieraksti kveriju, kuru izveidosi, izlasot šo dokumentācijas lapu:

http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Tur ir daudz piemēri, jo CSV faili var būt ar dažādām atdalošiem simboliem, utt., tāpēc kverijs tev jāizveido pašam.

 

 

Varētu derēt šis gadījums:

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
 FIELDS TERMINATED BY ',' ENCLOSED BY '"'
 LINES TERMINATED BY '\n';

Edited by codez
Link to comment
Share on other sites

atari, te tiešām nav vajadzīgs PHP.

Paņem consolē, mysqladminā vai mysql query browserī ieraksti kveriju, kuru izveidosi, izlasot šo dokumentācijas lapu:

http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Tur ir daudz piemēri, jo CSV faili var būt ar dažādām atdalošiem simboliem, utt., tāpēc kverijs tev jāizveido pašam.

 

 

Varētu derēt šis gadījums:

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
 FIELDS TERMINATED BY ',' ENCLOSED BY '"'
 LINES TERMINATED BY '\n';

 

Nu redzi man tiešām vajag php, jo tas csv fails atrodas citā tīkla uz cita servera, tad tas fails tiek ņemts un ar tā nelaimīgā php koda palīdzību ievadīti datubāzē ieraksti, kas it kā apdeitojas, vecie paliek kā ir un nāk klāt jaunie un tas php skripts reizi 5. minūtēs ar cron palīdzību tiek palaists. Viss darbojas lperfekti, līdz tam, ka ieraksti datubāzē atkārtojas pie katras palaišanas, nav tā ka apdeitojas tikai jaunais, laikam nevajadzēja vispār man skart tēmu par CSV, to tikai informācijas pēc pateicu, interesē lai kāds palīdzētu ar izmaiņām, kāds kods izsktatītos (izmainīts no tā ko iepostēju), lai būtu tikai ierakstu apdeits.

Link to comment
Share on other sites

bet to cvs failu tak ar php var noka4aat ...

pirms katra insterta taisi selectu :)

 

$a = mysql_query("SELECT x from table where y='$data'");

if (mysql_num_rows($a) == 0) mysql_query("INSERT INTO table (y) VALUES ('$data')");

 

vai arii katru reizi iztiiri tabulu un liec visu cvs saturu tabulaa pa jaunu ...

Link to comment
Share on other sites

bet to cvs failu tak ar php var noka4aat ...

pirms katra insterta taisi selectu :)

 

$a = mysql_query("SELECT x from table where y='$data'");

if (mysql_num_rows($a) == 0) mysql_query("INSERT INTO table (y) VALUES ('$data')");

 

vai arii katru reizi iztiiri tabulu un liec visu cvs saturu tabulaa pa jaunu ...

ok, ja arī dabūtu to lokāli, ar to pašu cron katras 5. minutes tas fails "pārrakstītos", bet šo te kāds nevar palīdzēt pielabot "ON DUPLICATE KEY UPDATE kaut kas utt." ko vajadzetu pievienot šeit, cik saprotu:

$sql = "insert into test values (". implode("'", $arr).") ON DUPLICATE KEY UPDATE kaut kas utt.";

 

tabulā test otrais lauks ir unikāls(cipari un burti), ja tas kaut kā palīdz varbūt var kaut kā slīdzinat, ja tāds jau ir tad daram -neko, jan nav tad ierakstam tabulā test, tā es sava diletanta prātā iedomājos, kā tas ir pareizi un iekš mysql pagaidām nezinu, bet būsu priecīgs uzzināt.

Edited by atari
Link to comment
Share on other sites

×
×
  • Create New...