{MySQL} Extracte d'une table sql en plusieurs fich

Fermé
krapoulos Messages postés 3 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 25 octobre 2009 - 25 oct. 2009 à 08:29
incaout Messages postés 347 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 novembre 2012 - 26 oct. 2009 à 18:38
Bonjour,

Ccela fait plusieurs jours que je cherche un script pour extraire toutes les donnees de ma table sql mais dans plusieurs fichiers textes de 2000 lignes chacun.
Voilà mon début de script et mon problème

<?
$vpcle=date("dmY_Hi");
$nomdetable="ma_table";
$nomduchamp="fulluser";
$nomdufichier="extract_mail_sql_au_".$vpcle;
$fichier = $nomdufichier.".txt"; 
touch($fichier); // Ceci crera le fichier texte nom_du_fichier.txt
$fp = fopen("$fichier","r+");
$link = mysql_connect ($hostXXX, $userXXX, $passXXX);
$sql="select * from $nomdetable ";
$result = mysql_db_query($bddXXX,$sql);

$trouve="0";
	while($row = mysql_fetch_array($result))
	{
	$trouve="1";
	 $zerecup=$row[$nomduchamp];
	 $zerecup2=$zerecup."; \n";
    fseek($fp,0,SEEK_END);	
    fputs($fp,$zerecup2);
	}	
	mysql_close($link);
	fclose($fp);
	echo " Récupération ok dans fichier txt -> ".$nomdufichier.".txt"; 
?> 


Et rien à faire j'ai beau regarder tous les post du forum je ne trouve rien.

Il me manque la boucle des 2000 données dans la requette mais je n'y arrive pas

Merci pour votre aide
A voir également:

4 réponses

moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
25 oct. 2009 à 10:52
Hello,
Ce que tu essaye de faire m'interesse. Pas encore eu le temps de m'y pencher.
Est-ce que tu as un message d'erreur ? Attention parce que fputs va te déposer un fichier sur ftp après l'avoir connecté. Vérifie que tu as bien les droits. Te connecter à ton ftp et déposer le fichier et faire un programme s'y connecter ça peut varier.

Par contre à quel moment tu segmentes le résultat de ta requete par coup d 2000 lignes ? je vois pas.
Soit tu mets un compteur au début pour récupérer le nombre de fois qu'il faudra boucler.
Un truc du genre
$result = mysql_db_query($bddXXX,$sql);
$nbLignes = mysql_num_rows($result);
$Nb_iterration = (soit avec MOD pour récupérer le reste de la division, soit en faisant $nbLignes/2000) ce qui te donnera le nombre de tour à faire. Normalement ça devrait faire 8 boucles et te créer 8 fichiers de 2000 lignes. Le dernier contiendra le reste pas forcément 2000...

Et dans la boucle tu fais ce que tu as déjà écrit.
C'est à dire créer le fichier, l'ouvrir, écrire dedans, le fermer, sortir, et copier sur ton ftp.....ect

J'espère que ça t'aidera

Moderno31
0
incaout Messages postés 347 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 novembre 2012 74
25 oct. 2009 à 10:56
Salut Krapoulos.

Tu peux essayer cela. Je n'ai pas vérifié si cela fonctionnait. A tester donc. Et il y a peut être plus simple aussi.

<?
$nomdetable="ma_table";
$nomduchamp="fulluser";
$nomdufichier="extract_mail_sql_au_";
//initialisation de la variable début de tranche
$d = 0;
$nbResultat = 0;

//requete qui compte le nombre de résultat
$sql = "SELECT COUNT $nomduchamp FROM $nomdetable";
$result = mysql_db_query($bddXXX,$sql);
if($result)
{
while ($row = mysql_fetch_row($result))
{
$nbresultat = $row[0];
}
}

while ($d <= $nbResultat)
{
if ($nbResultat - $d >= 2000)
{
$limite = 2000 + $d;
}
else
{
$limite = $nbResultat;
}
//Création de la requete
$sql = "SELECT * FROM $nomDeTable LIMIT $d, $limite";
//execution de la requete
$result = mysql_db_query($bddXXX,$sql);
if($result)
{
//si des resultats sont retournés, création du fichier avec utilisation de la date et de l'heure (heure,
//minute, seconde) pour être sur qu'il sera unique. on peut aussi utiliser $d et $limite dans le nom.
$vpcle=date("dmY_Hi");
$fichier = $nomdufichier. $vpcle . ".txt";
touch($fichier); // Ceci crera le fichier texte nom_du_fichier.txt
$fp = fopen("$fichier","r+");

//on parcourt les résultats avec une boucle
while($row = mysql_fetch_array($result))
{
$zerecup=$row[$nomduchamp];
$zerecup2=$zerecup."; \n";
fseek($fp,0,SEEK_END);
fputs($fp,$zerecup2);
}
//enregistrement du fichier
fclose($fp);
echo " Récupération ok dans fichier txt -> ".$nomdufichier.".txt<br>";
//mis à jour de $d pour aborder la tranche suivante
$d += $limite + 1;
}
else
{
die('probléme d'extraction de données');
}
}
?>
0
krapoulos Messages postés 3 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 25 octobre 2009
25 oct. 2009 à 22:51
Re,

Merci pour votre aide

Désolé j'ai essayé vos scripts mais cela ne fonctionne pas - Cela tourne en boucle sur une page blanche

Cdlt
0
incaout Messages postés 347 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 novembre 2012 74
26 oct. 2009 à 18:38
Bonsoir.

Désolé que cela ne fonctionne pas. Je n'ai pas testé le code et il peut y avoir des erreurs de syntaxe. J'ai vu que j'avais fait une erreur sur $nbresultat au début. Il faut l'écrire $nbResultat, sinon, je pense que pour Php ce n'est pas la même variable. Ensuite, il faudrait voir où cela coince, en mettant des écho régulièrement tout le long du programme et tester la valeur des différentes variables. Cela te permettrait d'isoler le problème.

J'ai aussi pensé que normalement, il faudrait tester pour savoir si le fichier que l'on souhaite créer n'existe pas déjà. A moins que tu n'utilises la date, l'heure, les minutes et secondes pour être sur que ton fichier est unique.


Essayes de commenter tout ce qui concerne la création et l'écriture dans les fichiers, afin de ne tester que la boucle de parcours des résultats de la requete. A chaque tour de boucle, tu peux par exemple demander à afficher la valeur de $d. Normalement, il doit prendre 0, 2001, 4002,.... selon le nombre de résultats que tu as dans ta requete. Tu peux aussi demander à afficher les résultats des requêtes. L'erreur est peut être là aussi.

Bon courage.

IC
0