{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
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
A voir également:
- {MySQL} Extracte d'une table sql en plusieurs fich
- Table ascii - Guide
- Table des matières word - Guide
- Mysql community server - Télécharger - Bases de données
- Table des annexes word ✓ - Forum Word
- Table des matières et table des annexes - Forum Word
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
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
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
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
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');
}
}
?>
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');
}
}
?>
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
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
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
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
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
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