atari Posted October 3, 2008 Report Share 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; Link to comment Share on other sites More sharing options...
andrisp Posted October 3, 2008 Report Share Posted October 3, 2008 Lūdzu, izmanto CODE tagu skriptiem. Vai arī paste.php.lv Link to comment Share on other sites More sharing options...
codez Posted October 3, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
bubu Posted October 3, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
atari Posted October 3, 2008 Author Report Share 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! Link to comment Share on other sites More sharing options...
bubu Posted October 3, 2008 Report Share Posted October 3, 2008 Kāds tur "php pusei" ar kautko sakars? Tā ir tīri MySQL lieta. Link to comment Share on other sites More sharing options...
codez Posted October 3, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
atari Posted October 3, 2008 Author Report Share 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. Link to comment Share on other sites More sharing options...
codez Posted October 3, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
andrisp Posted October 3, 2008 Report Share Posted October 3, 2008 Viņam vēl IGNORE vajag klāt arī. Link to comment Share on other sites More sharing options...
atari Posted October 3, 2008 Author Report Share 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. Link to comment Share on other sites More sharing options...
andrisp Posted October 3, 2008 Report Share Posted October 3, 2008 Nu skaties tad uz to on dublicate, ko codez iemeta. Link to comment Share on other sites More sharing options...
Klez Posted October 3, 2008 Report Share 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 ... Link to comment Share on other sites More sharing options...
atari Posted October 3, 2008 Author Report Share 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 Link to comment Share on other sites More sharing options...
andrisp Posted October 3, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
Recommended Posts