(resolu) requetes sur 900 bases mysql avec boucles

requetes sur 900 bases mysql avec boucles (resolu) - PHP - Programmation

Marsh Posté le 08-06-2010 à 20:23:29    

bonjour,
 
Voici mon problème :
Je dois creer une page en PHP pour aller interroger une table avec plusieurs champs (jusqu'ici pas trop compliqué pour moi), mais je dois interroger cette table sur plus de 900 bases mysql de mon parc.
 
- j'ai une table avec toute les IP auquelles il faut ce connecter.
- une autre table avec les champs que je veus.
 
je voudrais un résultat type :  
 
IP
résultat
résultat
IP
résultat
résultat
.....
 
Voici ce que j'ai déjà fait mais sans succés :
 

Code :
  1. <html>
  2. <body>
  3. <table>
  4. <?php
  5. set_time_limit(6000);
  6. // Connexion DataBase
  7. $root = mysql_connect('localhost','root','') OR DIE ('Probleme avec le compte Root');
  8. $base = mysql_select_db('BDO2000',$root) OR DIE ('Probleme avec la base de donnees');
  9. // Creation de la requete
  10. $sql = "Select PPV_UTF_SWITCH_FAC FROM ref_op_param_pv_utf";
  11. $sqltwo = "SELECT * FROM ref_tg_lien_pv_ip INNER JOIN ref_tg_ip ON pv_ip_idtip=ip_idtip";
  12. // Execution de la requete
  13. $reqtwo = mysql_query($sqltwo) OR DIE ('Erruer dans la requete'.$sqltwo);
  14. $req = mysql_query($sql) OR DIE ('Erreur dans la requete'.$sql);
  15. while ($tableautwo = mysql_fetch_array($reqtwo))
  16. {
  17. echo "<tr>";
  18. echo "<td>".$tableautwo['PV_IP_IDTPV']."<td>";
  19. echo "<td>".$tableautwo['IP_LIB']."<td>";
  20. echo "<td>";
  21. if ($magasin = @mysql_connect($tableautwo['IP_LIB'],'root',''))
  22. {
  23.  if($mabase = mysql_select_db('BDO2000',$magasin))
  24. while($tableau = mysql_fetch_array($req))
  25. {
  26. echo "<td>".$tableau['PPV_UTF_SWITCH_FAC']."<td>";
  27. }
  28. }
  29. }
  30. mysql_close();
  31. ?>
  32. </table>
  33. </body>
  34. </html>


 
Enfin plus je cherche et plus je n'y arrive plus. :pt1cable:  
 
j'aimerais bien un coup de pouce. Merci
Je suis dispo pour tout renseignements complémentaires.
(je ne sais même plus ou placer mes {} ! !)


Message édité par duyen le 10-06-2010 à 02:10:33
Reply

Marsh Posté le 08-06-2010 à 20:23:29   

Reply

Marsh Posté le 08-06-2010 à 21:27:04    

- commencer par virer le @ ligne 34, sinon ça te planque les erreurs et tu finis par t'arracher les cheveux.
- indente bien ton code STP, là c'est illisible, même pour toi je pense
- récupère tes données et stocke les dans un array() avant de les afficher, ce sera plus propre, au lieu de mélanger HTML, PHP et MySQL dans un gros globiboulga...


Message édité par theredled le 08-06-2010 à 21:31:18

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 08-06-2010 à 21:46:39    

Salut,
Merci de t'intéresser a mon probleme.
Je me suis improvisé dev en php et mysql. J'ai récupéré un bout de code d'une personne qui connaissait et qui avait fait une requete dans le même genre.
Malheureusement cette personne n'est plus là ! ! .
 
Bref
Peux tu détailler le récupère tes données et stock les dans un array()
 
Merci.

Reply

Marsh Posté le 08-06-2010 à 22:58:02    

a mon avis il faut executer la requete de selection pour chaque base, donc :

Code :
  1. <html>
  2. <body>
  3. <table>
  4. <?php
  5. set_time_limit(6000);
  6. // Connexion DataBase
  7. $root = mysql_connect('localhost','root','') OR DIE ('Probleme avec le compte Root');
  8. $base = mysql_select_db('BDO2000',$root) OR DIE ('Probleme avec la base de donnees');
  9. // Creation de la requete
  10. $sql = "Select PPV_UTF_SWITCH_FAC FROM ref_op_param_pv_utf";
  11. $sqltwo = "SELECT * FROM ref_tg_lien_pv_ip INNER JOIN ref_tg_ip ON pv_ip_idtip=ip_idtip";
  12. // Execution de la requete
  13. $reqtwo = mysql_query($sqltwo) OR DIE ('Erruer dans la requete'.$sqltwo);
  14. $req = mysql_query($sql) OR DIE ('Erreur dans la requete'.$sql);
  15. while ($tableautwo = mysql_fetch_array($reqtwo))
  16. {
  17.      echo "<tr>";
  18.      echo "<td>".$tableautwo['PV_IP_IDTPV']."<td>";
  19.      echo "<td>".$tableautwo['IP_LIB']."<td>";
  20.      echo "<td>";
  21.      if ($magasin = mysql_connect($tableautwo['IP_LIB'],'root',''))
  22.      {
  23.                 if($mabase = mysql_select_db('BDO2000',$magasin))
  24.                 {
  25.                      $req = mysql_query($sql) OR DIE ('Erreur dans la requete'.$sql);
  26.                      while($tableau = mysql_fetch_array($req))
  27.                     {
  28.                          echo "<td>".$tableau['PPV_UTF_SWITCH_FAC']."<td>";
  29.                     }
  30.                     mysql_close($magasin);
  31.                }
  32.          }
  33. }
  34. ?>
  35. </table>
  36. </body>
  37. </html>
 

voila l'idée

 

Edit : correction de syntaxe


Message édité par stef_dobermann le 08-06-2010 à 23:01:06

---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 08-06-2010 à 23:10:17    

Merci,  
je vais tester ça et je ferai un retour quand la requete aura finie de tourner.
 
Je venais de trouver une maniere qui a l'air de fonctionner, mais je vais essayer la tienne qui est plus propre.

Reply

Marsh Posté le 08-06-2010 à 23:20:37    

par contre il faut vérifier la requete qui tourne en boucle

Code :
  1. $sql = "Select PPV_UTF_SWITCH_FAC FROM ref_op_param_pv_utf";


si j'ai bien compris c'est une partie des données que tu veux récupérer
ensuite reste à interroger ta table principal qui contient la liste des champs que tu veux et d'adapter cette requête en conséquence.


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 08-06-2010 à 23:42:21    

En faite,
je veus récupérer l'adresse IP sur laquelle je suis connecter et toute les infos du champ PPV_UTF_SWITCH_FAC de la table ref_op_param_pv_utf et ce sur chaque IP.

Reply

Marsh Posté le 08-06-2010 à 23:45:07    

Voila celle que j'ai lancée avant ta réponse :
 

Code :
  1. <?php
  2. $start=gettimeofday();
  3. set_time_limit(6000);
  4. //Connection … la base mysql
  5. $mantis=mysql_connect('localhost','root','') or die('ERREUR 1: ERREUR DE CONNECTION A LA BASE MYSQL<br>');
  6. $database=mysql_select_db('BDO2000',$mantis) or die('ERREUR 2: ERREUR LORS DE LA SELECTION DE LA BASE DE DONNEE<br>');
  7. //Ma requete
  8. $sql_mantis="Select * FROM ref_tg_lien_pv_ip INNER JOIN ref_tg_ip ON pv_ip_idtip=ip_idtip";
  9. //Ex‚cution de la requete
  10. $requete=mysql_query($sql_mantis,$mantis) or die ('ERREUR 3: ERREUR DANS LA REQUETE SQL:<br>'.$sql_mantis);
  11. //Nb de resultat
  12. $nb_resultat=mysql_num_rows($requete);
  13. echo "<HTML>";
  14. echo "<HEAD></HEAD>";
  15. echo "<BODY>";
  16. echo "<table>";
  17. //Pour chaque site on se connecte sur la base et on passe la requete
  18. while($res=mysql_fetch_array($requete))
  19. {
  20. echo "<tr>";
  21. echo "<td>".$res['PV_IP_IDTPV']."<td>";
  22. echo "<td>".$res['IP_LIB']."<td>";
  23. echo "<td>";
  24.        
  25. //liste des version
  26. $sql="SELECT PPV_UTF_SWITCH_FAC FROM ref_op_param_pv_utf";
  27.        
  28.        
  29. if($magasin=@mysql_connect($res['IP_LIB'],'root',''))
  30. {
  31.  if($mabase=mysql_select_db('BDO2000',$magasin))
  32.  {
  33.   $resultat=mysql_query($sql,$magasin);
  34.   while ($reponse=mysql_fetch_array($resultat))
  35.   echo $reponse['PPV_UTF_SWITCH_FAC'];
  36.  }
  37.  else
  38.  {
  39.   echo "Pas de base disponible";
  40.  }
  41.  mysql_close($magasin);
  42. }
  43. else
  44. {
  45.  echo "Pas de connection.";
  46. }
  47. echo "</td>";
  48. echo "<tr>";
  49. }
  50. mysql_close($mantis);
  51. $end=gettimeofday();
  52. echo "</table>";
  53. $duree=$end['sec']-$start['sec'];
  54. echo "Duree : ".floor($duree/60)." minutes ".fmod($duree,60)." secondes.<br>";
  55. echo $sql;
  56. echo "</BODY>";
  57. echo "</HTML>";
  58. ?>


 
Elle tourne depuis un moment. J'attends le résultat.


Message édité par duyen le 08-06-2010 à 23:47:15
Reply

Marsh Posté le 08-06-2010 à 23:47:28    

ha ok, j'avais compris que tu avais une table qui contenais la liste des champs que tu voulais récupérer.
Alors c'est plus simple que ce que j'avais compris, tant mieux :)
mais pour info (curiosité) , ce champs contient quelle information ? et pourquoi autant de base ?


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 08-06-2010 à 23:54:04    

C'est pour mon boulot, je travail pour une centrale d'achats.
Et les magasins ont un progiciel qui tourne sur du mysql.
J'ai lancé l'activation d'un module en masse et maintenant je voulais connaitre ceux qui ne sont pas activés.
En tout cas, ça me retire une grosse épine. Car on a plus personne chez nous pour ce genre de dev.


Message édité par duyen le 08-06-2010 à 23:57:43
Reply

Marsh Posté le 08-06-2010 à 23:54:04   

Reply

Marsh Posté le 09-06-2010 à 00:03:39    

Ce forum est tres reactif, et ça c'est top. :)

Reply

Marsh Posté le 09-06-2010 à 11:49:29    

ensuite je suis parti me couché ;)
alors ton script, il a fini ?  
pour les tests du scripts on aurais pu utiliser une limite des adresses ip

Code :
  1. $sqltwo = "SELECT * FROM ref_tg_lien_pv_ip INNER JOIN ref_tg_ip ON pv_ip_idtip=ip_idtip limit 0,5";


pour chercher que sur 6 bases.


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 10-06-2010 à 00:26:11    

Salut,
 
C'est cool, elle a marchée et j'ai eu exactement ce que je voulais.
Encore merci.


Message édité par duyen le 10-06-2010 à 00:27:30
Reply

Marsh Posté le 10-06-2010 à 09:38:05    

alors c'est bon :)
pour info, il a fallu combien de temps ?


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 10-06-2010 à 20:57:57    

Quand je l'ai fais chez moi, ça a mit grosse heure. Et sur la base de prod, 1/4 d'heure.  
Mais chez moi je ne suis pas connecté directement sur les magasins.

Reply

Marsh Posté le 10-06-2010 à 21:57:51    

waou quand même 1/4 d'heure !!


---------------
Tout à commencé par un rêve...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed