atari Posted October 3, 2008 Report Posted October 3, 2008 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;
andrisp Posted October 3, 2008 Report Posted October 3, 2008 Lūdzu, izmanto CODE tagu skriptiem. Vai arī paste.php.lv
codez Posted October 3, 2008 Report Posted October 3, 2008 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
bubu Posted October 3, 2008 Report Posted October 3, 2008 Vispārīgā gadījumā MySQL CSV failus ērti var ielādēt ar vienu kveriju: Vai arī bez neviena kverija: http://dev.mysql.com/doc/refman/5.1/en/csv...age-engine.html
atari Posted October 3, 2008 Author Report Posted October 3, 2008 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!
bubu Posted October 3, 2008 Report Posted October 3, 2008 Kāds tur "php pusei" ar kautko sakars? Tā ir tīri MySQL lieta.
codez Posted October 3, 2008 Report Posted October 3, 2008 (edited) 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 October 3, 2008 by codez
atari Posted October 3, 2008 Author Report Posted October 3, 2008 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.
codez Posted October 3, 2008 Report Posted October 3, 2008 (edited) 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 October 3, 2008 by codez
atari Posted October 3, 2008 Author Report Posted October 3, 2008 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.
andrisp Posted October 3, 2008 Report Posted October 3, 2008 Nu skaties tad uz to on dublicate, ko codez iemeta.
Klez Posted October 3, 2008 Report Posted October 3, 2008 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 ...
atari Posted October 3, 2008 Author Report Posted October 3, 2008 (edited) 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 October 3, 2008 by atari
andrisp Posted October 3, 2008 Report Posted October 3, 2008 Vispār tev nederēs gan tas on dublicate. Tev tās rindas baigi daudz ? Varbūt vienkārši dari kā Klez rādīja.
Recommended Posts