Optimisation de requete sql

fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006 - 1 sept. 2005 à 15:18
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006 - 2 sept. 2005 à 12:00
Bonjour,
j'ai 2 requetes successives (les voici) :

<HR>

$reqazemp=mysql_query("select $tabledtgrp.CODE_ELT, $tablegrp.CODE_GROUPE, $nomtablesir.INSEE from $sirene.$nomtablesir, $reference.$tabledtgrp, $reference.$tablegrp where $tablegrp.code_regroupt='zemp' and $tablegrp.type_elt='comm' and $tabledtgrp.date_geree='oui' and $tabledtgrp.date_entree <= '$date' and $tabledtgrp.date_sortie >= '$date' and $tabledtgrp.TYPE_ELT='comm' and $tabledtgrp.CODE_GROUPE=$tablegrp.CODE_GROUPE and $nomtablesir.INSEE=$tabledtgrp.CODE_ELT");
if (!$reqazemp)
{ die('Requête invalide A ZEMP: ' . mysql_error());
exit(); }
if ($reqazemp)
{ echo "OK REQ A ZEMP";}


while ($datazemp = mysql_fetch_array($reqazemp))
{
$reqbzemp=mysql_query("update $sirene.$nomtablesir set ze='$datazemp[CODE_GROUPE]' where INSEE='$datazemp[CODE_ELT]' and DATE='$fich'");
}
if (!$reqbzemp)
{ die('Requête invalide B ZEMP: ' . mysql_error()); exit();}
if ($reqbzemp)
{ echo "OK REQ B ZEMP";}


mysql_free_result ($reqazemp);
mysql_free_result ($reqbzemp);
mysql_close ();

<HR>

j'aimerais savoir comment optimiser le temps d'execution des requêtes, car ces requetes fonctionnent très bien si j'ai 50 lignes (ça va assez vite), mais j'ai essayé avec un fichier de 40 000 lignes et là ça met un paquet de temps (a vrai dire je ne sais même pas combien car ça ne c'est pas terminé encore ...) et j'ai peur que ça bug pour finir !!!
Donc est-ce que quelqu'un à une methode qui permet d'accelèrer les requêtes ???
Merci d'avance !

12 réponses

fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
1 sept. 2005 à 15:25
encore une petite chose, j'execute à la suite de ces deux premières requetes deux autres identiques (enfin presque!!) donc je me demande si le mysql_close(); est bien nécessaire ici ??
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 sept. 2005 à 16:48
Hello,



le meilleur moyen d'accélerer une requête...c'est d'avoir une bonne structure de base de données.

Si tes requetes sont lentes, c'est que ta base est mauvaise.
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
1 sept. 2005 à 16:53
En fait, j'interroge 4 tables :
1 table avec 40000 lignes (table à updater), 1 table de 72000 lignes, 1 table de 46 000 lignes et la dernière 75 lignes et donc c'est peut etre pour cela mais je me demande si mes requêtes sont vraiment optimales !!!
car je fais un select puis un update donc j'ai l'impression qu'il met du temps à gérer ça !!!
merci de ton aide quand même !!!
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 sept. 2005 à 17:54
Salut,



c'est un post qui m'intéresse ça, tu peux nous donner la structure de
ta table stp (tu vas dans phpmyadmin, "exporter" et tu coches
"structure")

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
2 sept. 2005 à 09:13
Alors j'ai changé ma structure de table un peu (j'ai mis un id_unique) mais ce qui est bizarre est que ma base est désormais bien updater mais par contre il ne vient pas sur ma page de fin en gros qu'il ne s'arrête pas ou je sais pas trop !!
Donc là il met bien à jours ma table sirene, pour le champ EPCI mais mon problème est qu'il ne me dit jamais quand il a fini (il vient pas sur la page finenrichir.php, et qu'en plus normalement j'ai le même type de requête ensuite pour updater d'autre champ etça ça ne marche pas j'ai l'impression que mes 1ères requêtes ne terminent pas où je sais pas !!!
J'en peux plus je craque !!!

Pour que se soit plus simple voici mes pages php :
1er php : sélection du fichier à traiter et d'une date

<FORM method= "post" action="finenrichir.php">

Entrer la date de découpage souhaitée au format (aaaa-01-01) ou bien prendre le dernier découpage :
<?
$date_par_defaut=date("Y-d-m");
?>
<TD bgcolor=#FFCC99>
<?
if ( ! isset($date) )
{ $date=$date_par_defaut;
session_register("date");
}
echo "
"; ?>
Sélectionnez le fichier à enrichir :


<!- Valider ->

</FORM>

Donc ce 1er formulaire lance les requêtes sur ma page 2 :
$hostname="srv-msg.net";
$username="user";
$password="pwduser";
$reference="CNXGlob";
$sirene="sirene";
$tablegrp="groupes";
$tabledtgrp="det_grp";
$nomtablesir="sirene";

$fich = basename (substr ($newfichier, 0, -4));
echo $fich;
echo $date;
$link=mysql_connect($hostname, $username, $password);
if (!mysql_connect($hostname, $username, $password))
{
echo "ERREUR PASSWORD SERVEUR";
}
//VERIFICATION CONNEXION BASE
if (!mysql_select_db($reference, $link))
{
echo "ERREUR BASE REFERENCE";
exit();
}
if (!mysql_select_db($sirene, $link))
{
echo "ERREUR BASE SIRENE";
exit();
}
?>


<?php
//DECLARATION POUR EPCI
$reqaepci=mysql_query("select $nomtablesir.id_unique, $tabledtgrp.CODE_ELT, $tablegrp.CODE_GROUPE, $nomtablesir.INSEE from $sirene.$nomtablesir, $reference.$tabledtgrp, $reference.$tablegrp where $tablegrp.code_regroupt='epci' and $tablegrp.type_elt='comm' and $tabledtgrp.date_geree='oui' and $tabledtgrp.date_entree <= '$date' and $tabledtgrp.date_sortie >= '$date' and $tabledtgrp.TYPE_ELT='comm' and $tabledtgrp.CODE_GROUPE=$tablegrp.CODE_GROUPE and $nomtablesir.INSEE=$tabledtgrp.CODE_ELT");
if (!$reqaepci)
{ die('Requête invalide : ' . mysql_error());
exit(); }
if ($reqaepci)
{ echo "OK REQ A EPCI";}
//$dataepci = mysql_fetch_array($reqaepci);


while ($dataepci = mysql_fetch_array($reqaepci))
{
$reqbepci=mysql_query("update $sirene.$nomtablesir set epci='$dataepci[CODE_GROUPE]' where $dataepci[id_unique]");
}
if (!$reqbepci)
{ die('Requête invalide B ECPI: ' . mysql_error()); exit();}
if ($reqbepci)
{ echo "OK REQ B EPCI";}


mysql_free_result ($reqaepci);
mysql_free_result ($reqbepci);
mysql_close ();
?>


<FORM method="post" action="
menu_flux_sirene.php">


<!- Retour ->
Retour au formulaire de sirene:

et enfin voici ma structure de table :

CREATE TABLE `sirene`.`sirene` (



`id_unique` bigint( 20 ) NOT NULL AUTO_INCREMENT ,
`dep` varchar( 5 ) default NULL ,
`apet700` varchar( 10 ) default NULL ,
`datezone` varchar( 10 ) default NULL ,
`insee` varchar( 10 ) default NULL ,
`LIBCOM` varchar( 30 ) default NULL ,
`naf60` varchar( 16 ) default NULL ,
`naf240` varchar( 16 ) default NULL ,
`nes16` varchar( 10 ) default NULL ,
`nes36` varchar( 10 ) default NULL ,
`naf700` varchar( 16 ) default NULL ,
`nafg16` varchar( 10 ) default NULL ,
`nafg36` varchar( 10 ) default NULL ,
`SIRET` varchar( 30 ) default NULL ,
`DCRET` double default NULL ,
`SIEGE` double default NULL ,
`ORIGINE` double default NULL ,
`TEFET` double default NULL ,
`CODEVOIE` varchar( 11 ) default NULL ,
`MODET` double default NULL ,
`MARCHET` double default NULL ,
`SAISONAT` double default NULL ,
`NATURE` double default NULL ,
`NOMET` varchar( 40 ) default NULL ,
`CADR` varchar( 26 ) default NULL ,
`NUMVOIE` double default NULL ,
`INDREP` char( 1 ) default NULL ,
`TYPEVOIE` char( 3 ) default NULL ,
`LIBVOIE` varchar( 26 ) default NULL ,
`DISTSP` varchar( 26 ) default NULL ,
`CODPOS` double default NULL ,
`APEN700` varchar( 10 ) default NULL ,
`ZE94` double default NULL ,
`NOMEN` varchar( 40 ) default NULL ,
`MARCHEN` double default NULL ,
`SINGT` double default NULL ,
`CJ` double default NULL ,
`EFET` double default NULL ,
`DATE` varchar( 15 ) default NULL ,
`ape` varchar( 10 ) default NULL ,
`ics` double default NULL ,
`epci` varchar( 30 ) default NULL ,
`ze` varchar( 30 ) default NULL ,
`pays` varchar( 30 ) default NULL ,
`au` varchar( 30 ) default NULL ,
`za` varchar( 30 ) default NULL ,
`geoZA` varchar( 30 ) NOT NULL default '',
`dateZA` date default '0000-00-00',
`typeid_ZA` varchar( 30 ) NOT NULL default '',
`NRCI_DEBUT` varchar( 40 ) NOT NULL default '',
`RCI` varchar( 30 ) NOT NULL default '',
PRIMARY KEY ( `id_unique` ) ,
UNIQUE KEY `id_unique` ( `id_unique` )


) ENGINE InnoDB DEFAULT CHARSET latin1;
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
2 sept. 2005 à 09:23
je crois vraiment qu'il y a un truc qui tourne sans arret car lorsque je fais un UPDATE sirene set epci=' ' pour tout enlever pour recommencer, 30 secondes après j'ai a nouveau des données dans mon champs !!!!

je crois que je dois avoir une merde dans mon programme c'est pas possible !!!
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 sept. 2005 à 10:08
Ok merci pour cette structure,



déjà remplace InnoDB par MyISAM, ensuite enlève la clé primaire pour ne laisser que la clé unique, un seul index suffit.



Pour le reste ta requête c'est ça, mais ça donne quoi en réalité (qu'on voit sur quelles tables la requête intervient) ?





$reqazemp=mysql_query("select $tabledtgrp.CODE_ELT,
$tablegrp.CODE_GROUPE, $nomtablesir.INSEE from $sirene.$nomtablesir,
$reference.$tabledtgrp, $reference.$tablegrp where
$tablegrp.code_regroupt='zemp' and $tablegrp.type_elt='comm' and
$tabledtgrp.date_geree='oui' and $tabledtgrp.date_entree <= '$date'
and $tabledtgrp.date_sortie >= '$date' and
$tabledtgrp.TYPE_ELT='comm' and
$tabledtgrp.CODE_GROUPE=$tablegrp.CODE_GROUPE and
$nomtablesir.INSEE=$tabledtgrp.CODE_ELT");



Ensuite donne-nous la structure des autres tables mises en jeu stp

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
2 sept. 2005 à 10:35
alors pour l'instant j'ai pas remplacé ce que tu m'a dit (mais je vais le faire)!!!
mais mes requetes fonctionnent c'est à dire qu'il met bien à jours la table sirene (champ EPCI, ZEMP, AU, PAYS), lorsque je regarde dans ma table les infos sont bien mises (et assez rapidement) enfin j'ai l'impression par contre je crois qu'il n'arrête jamais de mettre à jours et je sais pas pourquoi il ne s'arrête pas.
Donc en définitive il met bien à jours ma table mais il me dit pas quand il a fini car j'ai l'impression qu'il ne s'arrête jamais ...!!
voici mon code complet avec mes différentes reqûêtes peut être (surement) que j'ai oublier de lui dire un truc!!
pourtant ce que je ne comprends pas c'est que lorsque je lui dit de mettre à jours une ligne (ex: date= sir2005s2) ça fonctionne bien et il me dit que les requetes on ben marché
Bon je fais les corrections que tu m'as dit !!!
En tout cas merci anthomicro !!!
je te mets aussi la structure des autre tables !!!
Voici mon code :
//VERIFICATION CONNEXION SERVEUR
$fich = basename (substr ($newfichier, 0, -4));
echo $fich;
echo $date;
$link=mysql_connect($hostname, $username, $password);
if (!mysql_connect($hostname, $username, $password))
{
echo "ERREUR PASSWORD SERVEUR";
}
//VERIFICATION CONNEXION BASE
if (!mysql_select_db($reference, $link))
{
echo "ERREUR BASE REFERENCE";
exit();
}
if (!mysql_select_db($sirene, $link))
{
echo "ERREUR BASE SIRENE";
exit();
}
?>

<?php
//DECLARATION POUR EPCI
$reqaepci=mysql_query("select $nomtablesir.id_unique, $tabledtgrp.CODE_ELT, $tablegrp.CODE_GROUPE, $nomtablesir.INSEE from $sirene.$nomtablesir, $reference.$tabledtgrp, $reference.$tablegrp where $tablegrp.code_regroupt='epci' and $tablegrp.type_elt='comm' and $tabledtgrp.date_geree='oui' and $tabledtgrp.date_entree <= '$date' and $tabledtgrp.date_sortie >= '$date' and $tabledtgrp.TYPE_ELT='comm' and $tabledtgrp.CODE_GROUPE=$tablegrp.CODE_GROUPE and $nomtablesir.INSEE=$tabledtgrp.CODE_ELT and $nomtablesir.DATE='$fich'");
if (!$reqaepci)
{ die('Requête invalide : ' . mysql_error());
exit(); }
if ($reqaepci)
{ echo "OK REQ A EPCI";}

while ($dataepci = mysql_fetch_array($reqaepci))
{
$reqbepci=mysql_query("update $sirene.$nomtablesir set epci='$dataepci[CODE_GROUPE]' where $dataepci[id_unique]");
}
if (!$reqbepci)
{ die('Requête invalide B ECPI: ' . mysql_error()); exit();}
if ($reqbepci)
{ echo "OK REQ B EPCI";}

mysql_free_result ($reqaepci);
mysql_free_result ($reqbepci);


?>
<?php
//DECLARATION POUR ZEMP
$reqazemp=mysql_query("select $nomtablesir.id_unique, $tabledtgrp.CODE_ELT, $tablegrp.CODE_GROUPE, $nomtablesir.INSEE from $sirene.$nomtablesir, $reference.$tabledtgrp, $reference.$tablegrp where $tablegrp.code_regroupt='zemp' and $tablegrp.type_elt='comm' and $tabledtgrp.date_geree='oui' and $tabledtgrp.date_entree <= '$date' and $tabledtgrp.date_sortie >= '$date' and $tabledtgrp.TYPE_ELT='comm' and $tabledtgrp.CODE_GROUPE=$tablegrp.CODE_GROUPE and $nomtablesir.INSEE=$tabledtgrp.CODE_ELT and $nomtablesir.DATE='$fich'");
if (!$reqazemp)
{ die('Requête invalide : ' . mysql_error());
exit(); }
if ($reqazemp)
{ echo "OK REQ A ZEMP";}

while ($datazemp = mysql_fetch_array($reqazemp))
{
$reqbzemp=mysql_query("update $sirene.$nomtablesir set ze='$datazemp[CODE_GROUPE]' where $datazemp[id_unique]");
}
if (!$reqbzemp)
{ die('Requête invalide B ZEMP: ' . mysql_error()); exit();}
if ($reqbzemp)
{ echo "OK REQ B ZEMP";}

mysql_free_result ($reqazemp);
mysql_free_result ($reqbzemp);


?>
<?php
//DECLARATION POUR AU
$reqaau=mysql_query("select $nomtablesir.id_unique, $tabledtgrp.CODE_ELT, $tablegrp.CODE_GROUPE, $nomtablesir.INSEE from $sirene.$nomtablesir, $reference.$tabledtgrp, $reference.$tablegrp where $tablegrp.code_regroupt='au' and $tablegrp.type_elt='comm' and $tabledtgrp.date_geree='oui' and $tabledtgrp.date_entree <= '$date' and $tabledtgrp.date_sortie >= '$date' and $tabledtgrp.TYPE_ELT='comm' and $tabledtgrp.CODE_GROUPE=$tablegrp.CODE_GROUPE and $nomtablesir.INSEE=$tabledtgrp.CODE_ELT and $nomtablesir.DATE='$fich'");
if (!$reqaau)
{ die('Requête invalide A AU: ' . mysql_error());
exit(); }
if ($reqaau)
{ echo "OK REQ A AU";}

while ($dataau = mysql_fetch_array($reqaau))
{
$reqbau=mysql_query("update $sirene.$nomtablesir set au='$dataau[CODE_GROUPE]' where $dataau[id_unique]");
}
if (!$reqbau)
{ die('Requête invalide B AU: ' . mysql_error()); exit();}
if ($reqbau)
{ echo "OK REQ B AU";}

mysql_free_result ($reqaau);
mysql_free_result ($reqbau);

?>
<?php

$reqapays=mysql_query("select $nomtablesir.id_unique, $tabledtgrp.CODE_ELT, $tablegrp.CODE_GROUPE, $nomtablesir.INSEE from $sirene.$nomtablesir, $reference.$tabledtgrp, $reference.$tablegrp where $tablegrp.code_regroupt='pays' and $tablegrp.type_elt='comm' and $tabledtgrp.date_geree='oui' and $tabledtgrp.date_entree <= '$date' and $tabledtgrp.date_sortie >= '$date' and $tabledtgrp.TYPE_ELT='comm' and $tabledtgrp.CODE_GROUPE=$tablegrp.CODE_GROUPE and $nomtablesir.INSEE=$tabledtgrp.CODE_ELT and $nomtablesir.DATE='$fich'");
if (!$reqapays)
{ die('Requête invalide A PAYS: ' . mysql_error());
exit(); }
if ($reqapays)
{ echo "OK REQ A PAYS";}

while ($datapays = mysql_fetch_array($reqapays))
{
$reqbpays=mysql_query("update $sirene.$nomtablesir set pays='$datapays[CODE_GROUPE]' where $datapays[id_unique]");
}
if (!$reqbpays)
{ die('Requête invalide B PAYS: ' . mysql_error()); exit();}
if ($reqbpays)
{ echo "OK REQ B PAYS";}

mysql_free_result ($reqapays);
mysql_free_result ($reqbpays);
mysql_close ($link);
?>


<FORM method="post" action="
/menu_flux_sirene.php">


<!- Retour ->
Retour au formulaire de sirene:



</html>

<HR>

voici la table det_grp

CREATE TABLE `det_grp` (
`cleUnique` bigint(20) NOT NULL auto_increment,
`NUM_GROUPE` bigint(20) NOT NULL default '0',
`NUM_ELT` bigint(20) NOT NULL default '0',
`CODE_GROUPE` varchar(16) NOT NULL default '0',
`TYPE_ELT` varchar(10) NOT NULL default '',
`CODE_ELT` varchar(16) NOT NULL default '0',
`date_geree` char(3) NOT NULL default 'non',
`date_entree` date NOT NULL default '1000-01-01',
`date_sortie` date NOT NULL default '2999-12-31',
`KPSDC` float(6,4) NOT NULL default '1.0000',
`KPRES` float(6,4) NOT NULL default '1.0000',
`KNLOG` float(6,4) NOT NULL default '1.0000',
`KNRES` float(6,4) NOT NULL default '1.0000',
`HoroMaj` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`Fichier` varchar(100) NOT NULL default 'inconnu',
PRIMARY KEY (`CODE_GROUPE`,`TYPE_ELT`,`CODE_ELT`,`date_geree`,`date_entree`),
UNIQUE KEY `cleUnique` (`cleUnique`),
KEY `CODE_GROUPE` (`CODE_GROUPE`),
KEY `CODE_ELT` (`CODE_ELT`),
KEY `TYPE_ELT` (`TYPE_ELT`),
KEY `date_sortie` (`date_sortie`),
KEY `date_entree` (`date_entree`),
KEY `date_geree` (`date_geree`)
) ENGINE =MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=178708 ;


<HR>
la table groupes :

CREATE TABLE `groupes` (
`CleUnique` int(11) NOT NULL auto_increment,
`NUM_GROUPE` bigint(20) NOT NULL default '0',
`CODE_REGROUPT` varchar(10) NOT NULL default '',
`NOM_GROUPE` text NOT NULL,
`QTE_ELT` bigint(20) NOT NULL default '0',
`TYPE_ELT` varchar(10) NOT NULL default '',
`CODE_GROUPE` varchar(16) NOT NULL default '',
`VARZONE` varchar(5) default NULL,
`CARTE` text NOT NULL,
`CENTROIDES` text NOT NULL,
`HoroMaj` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`FICHIER` varchar(48) NOT NULL default 'inconnu',
PRIMARY KEY (`CODE_REGROUPT`,`TYPE_ELT`,`CODE_GROUPE`),
UNIQUE KEY `CleUnique` (`CleUnique`),
KEY `TYPE_ELT` (`TYPE_ELT`),
KEY `CODE_GROUPE` (`CODE_GROUPE`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=164556 ;
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 sept. 2005 à 11:23
Ajoute à ta table "sirene" un index sur le champ DATE et sur le champ INSEE



Ensuite pour ta table "det_grp
" ajoute
un index sur le champ code_regroupt, sur le champ type_elt, sur le
champ date_geree, sur le champ date_entree, sur le champ date_sortie,
sur le champ TYPE_ELT



Ensuite ajoute un index pour la table "groupes" sur le champ CODE_GROUPE



Enlève la clé primaire sur la table "groupes"




Voilà passe toutes tes tables en MyISAM ensuite. Teste ensuite la
différence des temps de génération et si t'as encore un problème stp
soit plus clair, ça fait 20 minutes que j'essaie de recouper tes
requetes. Maintenant que j'ai la structure de tes tables file-moi un
exemple pour les trois requetes



exemple : SELECT champ FROM table WHERE machin='truc' et pas



SELECT $machin.champ FROM $tablemachin WHERE $tablemachin.truc=$machin



c'est chiant pour s'y retrouver. Bref tu fais un echo de deux ou trois requetes et ça devrait aller.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
2 sept. 2005 à 11:31
désolé c'est clair que j'ai pas été cool là dessus !!
Par contre, je peux pas trop modifié les tables det_grp et groupes car ce sont des tables standard utilisé par d'autre application, et j'ai pas trop envie de faire des manip dessus !!!
moi là ce qui m'étonne est que ça fonctionne bien et assez rapidement (il met bien les infos dans ma table sirene) mais il ne se termine jamais !!!!

j'en ai marre, j'ai essayé de changer la table sirene en MyISAM et depuis ça déconne !!! j'arrive plus à ouvrir ma base de données ça rame !!!!
Je comprends pas pourquoi ça marche très bien pour 40 lignes et que pour 40000 ça déconne !! que cela met plus de temps d'accord mais au bout d'un certains temps ça devrai s'arrêter !!!
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
2 sept. 2005 à 11:45
voici mes requetes en propre :

$date= 2005-01-0
$fich=sir2004s2



$reqa epci =mysql_query("SELECT sirene.id_unique, det_grp.CODE_ELT, groupes.CODE_GROUPE, sirene.INSEE
FROM sirene.sirene, cnxaudiarGlob.det_grp, cnxaudiarGlob.groupes
WHERE groupes.code_regroupt = ' epci '
AND groupes.type_elt = 'comm'
AND det_grp.date_geree = 'oui'
and det_grp.date_entree <= '$date' and det_grp.date_sortie >= '$date'
AND det_grp.TYPE_ELT = 'comm'
AND det_grp.CODE_GROUPE = groupes.CODE_GROUPE
AND sirene.INSEE = det_grp.CODE_ELT
AND sirene.DATE='fich'");

if (!$reqa epci )
{ die('Requête invalide : ' . mysql_error());
exit(); }
if ($reqaepci)
{ echo "OK REQ A EPCI";}
//$dataepci = mysql_fetch_array($reqaepci);


while ($dataepci = mysql_fetch_array($reqa epci ))
{
$reqbepci =mysql_query("update sirene.sirene set epci='$dataepci[CODE_GROUPE]' where $dataepci[id_unique]");

et ensuite je fais les mêmes requetes pour d'autres paramètres !!!

merci en tout cas de ta patience car moi je perds la mienne ....!!
0
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
2 sept. 2005 à 12:00
j'ai refait une tentative et ma base de données est bien mise à jours comme il faut mais par contre il reste toujours bloqué et est en ouverture de ma page finienrichir.php. et je pense que d'ici 1 h00 mysql va planter !!
je ne comprends vraiment pas pourquoi il fait bien les opérations dans ma table mais qu'il ne s'arrête pas !!
est-ce que cela peut venir de mes boucles while ???

PS: lorsque j'ai qu'une seule ligne à mettre à jours il fini bien le travail !!!!!
0
Rejoignez-nous