bra Posted August 7, 2005 Report Share Posted August 7, 2005 drši vien ka stūlbs jautājums, bet lieta sekojoša fails ip.sql vajg dabūt ieš db faila saturs izskatās aptuveni šāds: INSERT INTO iptocountry VALUES (33996344,33996351,'GB','GBR','UNITED KINGDOM'), (50331648,69956103,'US','USA','UNITED STATES'), (69956104,69956111,'BM','BMU','BERMUDA'), .................... un vel dafiga daudz rindiņu kāds varētu izskatīties kods, kurš palīdzētu faila saturu dabūt manīgajā un tad attiecīgi izpildīt visas nepieciešamās darbības (INSET .....) Link to comment Share on other sites More sharing options...
bubu Posted August 7, 2005 Report Share Posted August 7, 2005 mysql_query(file_get_contents('fails.txt')); Link to comment Share on other sites More sharing options...
Robis Posted August 7, 2005 Report Share Posted August 7, 2005 Ja failā sql pieprasījumi beidzas ar ";" zīmi, kā tas pienāktos, tad varētu mēģināt šādi: $root = getcwd(); $filename = $root.'ip.sql'; $handle = fopen($filename, 'r'); $filecontents = fread($handle, filesize($filename)); $query_array = explode(";", $filecontents); foreach ($query_array as $val) @mysql_query($val); Tas ir ļoti elementārs veids, bet tam ir trūkumi, ja kaut kur laukos tiek iekļauta ";" zīme, bet izskatījās, ka tev te nav... Link to comment Share on other sites More sharing options...
Robis Posted August 7, 2005 Report Share Posted August 7, 2005 Jā, nu var arī tādā variantā, vispār, jo vienkāršāk jo labāk :) Link to comment Share on other sites More sharing options...
bra Posted August 7, 2005 Author Report Share Posted August 7, 2005 (edited) bubu varianc -> ņā itkā laikam šancē tikai tas gan ir labs errors MYSQL ERROR MYSQL SED:MySQL server has gone away $db = new db; $db->connect(DbUser, DbPass, DbName); #DB conect $db->query(file_get_contents('ip.sql'))or die("MYSQL ERROR MYSQL SED:".mysql_error()); Edited August 7, 2005 by bra Link to comment Share on other sites More sharing options...
Kristabs Posted August 7, 2005 Report Share Posted August 7, 2005 sadali pieprasiijumus pa gabaliem, nesuuti visus insertus uzreiz, bet pa kaadiem 5k ar pauzeem Link to comment Share on other sites More sharing options...
Robis Posted August 7, 2005 Report Share Posted August 7, 2005 Nu šai gadījumā mans variants būtu bijis labāks iespējams, bet vislabākais jau ir vispār pašu failu sadalīt pa vairākām daļām un pieprasījumus veikt atsevišķi. Link to comment Share on other sites More sharing options...
Klez Posted August 7, 2005 Report Share Posted August 7, 2005 $filename = "./ip.sql"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle); mysql_query($contents); Link to comment Share on other sites More sharing options...
bra Posted August 7, 2005 Author Report Share Posted August 7, 2005 sadali pieprasiijumus pa gabaliem, nesuuti visus insertus uzreiz, bet pa kaadiem 5k ar pauzeem nu tas ir diezgan neriāli fails ~1,4 MB, bat ideja nav slikta, tagad rodas jautājums vai pastāv iespēja nolasīt tikai noteiktu rindu skaitu insertot tad nolasīt nākamo un tā līdz viss fails inclūdoc iekš DB jo pieņemu ka tas krietni atvieglotu lielu DB Dumpu updeitošanu. īsāk vai ir iespējams ar php nolasīt piem 500 rindiņas -> izpildīt qeriju un sākt visu no 501 rindiņas. Ideja varētu būt sekojoša nolasam cik kopā rindas ir failā izdalam ar 500 -> iegūstam blogu skaitu (piem 1000 / 500 = 2 tātad divi bloki) = divi qyeriji nezinu vai šī ideja darbosies, bet ja darbosies tad nezinu kā to panākt. Varbūt jums ir idejas kā to panākt, vai arī kāds labāks risinājums. Link to comment Share on other sites More sharing options...
Kristabs Posted August 7, 2005 Report Share Posted August 7, 2005 papildinaats Robis variants $root = getcwd(); $filename = $root.'ip.sql'; $handle = fopen($filename, 'r'); $filecontents = fread($handle, filesize($filename)); $i=0; $query_array = explode(";", $filecontents); foreach ($query_array as $val) { if($i % 500 == 0){ sleep(2); } @mysql_query($val); $i++;} Link to comment Share on other sites More sharing options...
viss_kedaas Posted August 7, 2005 Report Share Posted August 7, 2005 <?php $fails = file("sql.sql"); for($i=0;$i<count($fails);$i++){ $failss = substr($fails[$i], 0, -3); echo $failss.'<br/>'; mysql_query("INSERT INTO iptocountry VALUES $failss"); } Man strādā ideāli.... P.S. tikai izdzēs pirmo rindinju un pedejai beigas padzees, liksies tev pa vienam query, tikai nezinu cik tas ātri, bet tomēr labāk nekā ar roku... ko domājat pa vienam query iet ilgāk vai pa pusi sadalot būtu ātrāk ? Link to comment Share on other sites More sharing options...
bra Posted August 7, 2005 Author Report Share Posted August 7, 2005 papildinaats Robis variants $root = getcwd(); $filename = $root.'ip.sql'; $handle = fopen($filename, 'r'); $filecontents = fread($handle, filesize($filename)); $i=0; $query_array = explode(";", $filecontents); foreach ($query_array as $val) { if($i % 500 == 0){ sleep(2); } @mysql_query($val); $i++;} 20469[/snapback] hmm izskatās interesanti, tikai viena lieta tāda tur ir vairāk kā 100000 rindiņu :P tādēļ viss_kedaas varianc vilksies vairāķ kā mūžību, bet laikam ātrāk nevarēs Link to comment Share on other sites More sharing options...
Klez Posted August 7, 2005 Report Share Posted August 7, 2005 tach iebaro to SQL failu phpMyadmin un viss buus OK . manam variantam arii vaidzeetu straadaa. tas nekas ka tas fails ir bik virs 1 MB ... Link to comment Share on other sites More sharing options...
Recommended Posts