IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Comparaison XML / SQL


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 55
    Points : 34
    Points
    34
    Par défaut [SimpleXML] Comparaison XML / SQL
    Bonjour, j'ai réalisé un scripts qui compare une base en SQL et la table correspondante en xml. Ensuite, il supprimme de la table SQL les entrées qui ne sont pas dans la base xml.

    Avec plus de 3000 produits dans les tables, Ce code fonctionne mais est bien trop lourd !

    Comment puis-je l'optimiser ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //selection de tous les produits de la table SQL
    $exist_query = mysql_query(" SELECT * from products ");
    while($tableau = mysql_fetch_array($exist_query ))
    {
    $exist = 0;
    //selection de tous les produits de la table XML
    	foreach($xml->Data->Exportation_XML->Ligne_XML as $name){
    //Comparaison 	
    		if ($name->GA_ARTICLE == $tableau['products_id']){$exist = 1;}
    	}
    	if ($exist == 0){mysql_query("DELETE FROM products WHERE products_id= '".$tableau['products_id']."'")or die('Impossible de se connecter : ' . mysql_error());} 
    }
    Merci

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    déjà il suffit que tu parcours le fichier XML un seule fois et tu stockes tous les "products_id" dans un tableau PHP
    ensuite avec ce tableau tu construis une requête DELETE avec NOT IN
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM products WHERE products_id NOT IN ('2', '3', '4')

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 55
    Points : 34
    Points
    34
    Par défaut
    Merci ca a l'air beaucoup mieux comme ca.
    Donc j'ai crée mon array mais je n'arrive pas a l'utiliser dans ma requete :
    ( Les array c'est pas mon fort ^^ )
    J'ai essayé ca mais ca ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM customers WHERE products_id NOT IN $tiers_comp[]
    Merci

  4. #4
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    il ne faut pas mélanger PHP ET SQL, ce sont deux langages différents, avec des synthaxes et éléments de langages tout aussi différents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    mysql_query('DELETE FROM customers WHERE products_id NOT IN ('.implode(',',$tiers_comp).')');
    ?>

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 55
    Points : 34
    Points
    34
    Par défaut
    Merci ca marche parfaitement bien et c'est bien plus rapide ^^

    Mathieu, il manquait juste a ton code les guillemets pour l'affichage du tableau dans la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM customers WHERE customers_id NOT IN ("'.implode('","',$tiers_comp).'")
    Merci a vous deux.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Attention, n'oublies pas de vérifier qu'il n'y ait pas de possibilités d'injection SQL :
    http://php.developpez.com/faq/?page=...rite-injection

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SimpleXML] bdd xml avec php
    Par ecdxml dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/06/2006, 13h53
  2. Comparaison XML-base de donnée SQL
    Par mtaveau dans le forum XQUERY/SGBD
    Réponses: 11
    Dernier message: 02/05/2006, 03h45
  3. [SimpleXML] PHP XML et accès aux variables
    Par vanilla dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 21/04/2006, 17h58
  4. XML + SQL = XSQL
    Par yap92fr dans le forum XQUERY/SGBD
    Réponses: 10
    Dernier message: 08/09/2005, 11h21
  5. Comparaison Livres SQL 2
    Par Sitting Bull dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/09/2004, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo