Extraire des données mysql vers des fichiers texte
dgdev
-
-helper- Messages postés 89 Date d'inscription Statut Membre Dernière intervention -
-helper- Messages postés 89 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
depuis des heures je cherche comment faire pour extraire 90000 enregistrements d'une base mysql vers des fichiers en contenant respectivement 1000 chacun. Après opération, je dois obtenir 90 fichiers texte de 1000 lignes.
Merci par avance de votre aide,
DgDev
depuis des heures je cherche comment faire pour extraire 90000 enregistrements d'une base mysql vers des fichiers en contenant respectivement 1000 chacun. Après opération, je dois obtenir 90 fichiers texte de 1000 lignes.
Merci par avance de votre aide,
DgDev
A voir également:
- Extraire des données mysql vers des fichiers texte
- Extraire une video youtube - Guide
- Renommer des fichiers en masse - Guide
- Trier des données excel - Guide
- Extraire texte d'une image - Guide
- Extraire le son d'une vidéo - Guide
2 réponses
ok, j'aurais tendance à dire cela :
$i=0; $j=0; $fichier = "mon_fichier"; $rep = mysql_query("ta_requete"); while($data=mysql_fetch_assoc($rep)){ $mon_fichier = $fichier.$j.".txt"; $hand = fopen($mon_fichier,"a+"); foreach($data as $k=>$v){ fwrite($hand, $k."\t".$v);} fclose($hand); $i++; if($i>=1000){$i=0;$j++;} }
Re,
Maintenant ca ressemble plus à un exercice d'algo... dans ce cas, on peut se passer du mot clef "LIMIT"...
Voici ce qui me semble être la proposition la plus lisible et plus performante (non testée, mais sur le principe tu trouveras à mon avis pas mieux...) :
Alors j'ai une bonne note !?
S@M
Maintenant ca ressemble plus à un exercice d'algo... dans ce cas, on peut se passer du mot clef "LIMIT"...
Voici ce qui me semble être la proposition la plus lisible et plus performante (non testée, mais sur le principe tu trouveras à mon avis pas mieux...) :
// Init... $sDirPath = dirname( __FILE__ ); // Tant qu'on a des enregistrements... $rep = mysql_query( "SELECT field1, field2 FROM Matable ORDER BY field1 ASC" ); $iFiles = 0; while( ($aRow = mysql_fetch_assoc($rep)) !== false ){ // Ouvre un nouveau fichier $sFilePath = $sDirPath . DIRECTORY_SEPARATOR . 'mon_fichier' . $iFiles . 'txt'; if( ($hF = fopen( $sFilePath, 'a+' )) !== false ) { // Tant qu(on a des enregistrements en base et qu'on a pas dépassé le nombre autorisé par fichier... $iRows = 0; while( ($aRow = mysql_fetch_assoc($rep)) !== false && $iRows < 1000 ) { fwrite( $hF, implode( '|', array_values( $aRow ) ) . PHP_EOL ); $iRows++; } fclose( $hF ); } else { throw new Exception( "Impossible d'écrire dans le fichier $sFilePath !" ); } $iFiles++; }
Alors j'ai une bonne note !?
S@M
Si c'est le cas... On va ouvrir/fermer 90000 fois les fichiers.... c'est loin d'etre optimal comme algo...
Si c'est Mysql ton SGBD, il y a moyen de faire de la pagination avec le mot clef LIMIT...