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

PHP & Base de données Discussion :

[SQL] Optimisation de requêtes


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Par défaut [SQL] Optimisation de requêtes
    bonjour à tous

    je suis en train de réaliser un fichier php qui à partir d'un flux xml insére les éléments de ce flux dans une table mysql nommé "news".
    Bien entendu si l'élément du flux xml existe déjà dans la base mysql je ne l'insère pas pour qu'il n'y ai pas de doublon.

    j'aimerai que quelqu'un me donne des conseils pour optimiser ce scripts car je fais bcp trop de requetes en boucle.

    voici le Code et merci d'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    include("connection.php"); // contient les paramêtres de connection à la base de données
    require_once "../rss/rss_fetch.inc.php"; // contient les fonctions pour parser le XML et récupérer les valeurs
    $fichier_xml = "mon fichier.newsinternet.xml"; // adresse du fichier XML
    $nombre_element = 100; // nombre max d'élément que l'on veut récuperer du fichier XML
     
     
    $rss = fetch_rss($fichier_xml);
     
    if (is_array($rss->items))
     
        {
        $liste = array_slice($rss->items, 0, $nombre_element);
     
        foreach ($liste as $item ) {
    		if ($item[category] == "FAI")
    			{
    			$nom_source=$rss->channel;
    			$titrexml = utf8_encode($item[title]);
    			$url = $item[link];
    			$pubdate = $item[pubdate];
    			$description = utf8_encode($item[description]);
    			$sql = "SELECT * FROM news";
    			$res= mysql_query($sql);
    			while ($row=mysql_fetch_array($res))
    				{
    				$titrebdd=$row["titre"];
    				if ($titrexml != $titrebdd)
    					{
    					$sql2="INSERT INTO news(titre, description, date_news, nom_source, lien_source) VALUES ( '$titrexml', '$description', '$pubdate', '$nom_source', '$url')";
    					$res2 = mysql_query($sql2);
    					}
    				}
    			}
     
    		}
    ?>

  2. #2
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Par défaut des conseils...
    Plutôt que de te faire ton script tout prêt, je préfère te donner des conseils...

    J'espère que d'autres, bien plus confirmés que moi, passeront par là pour t'en donner d'autres car ton post me semble très intéressant pour traiter de la méthodologie.

    Donc, je te conseille d'oublier, pour un instant, la programmation de ton script et détudier les actions à mener au point de vue algorithmique. Décortique chaque étape et garde en mémoire qu'en algorithmie tout comme en programmation la première solutions et rarement la meilleure.

  3. #3
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Par défaut
    le problème c'est que je ne maitrise pas bien les array

    apparement la solution pourrais être là pour éviter les multiples appel à la base de donnée?

  4. #4
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Par défaut array vs requêtes SQL
    C'est certain que moins tu feras d'appels à la base et plus tu gagneras en temps d'exécution. La solution est de faire un seul appel et de tout sauvegarder dans un (ou plusieurs) tableau(x).

    En même temps, je te conseillerai de créer un champ identifiant et de ne vérifier que celui-ci, s'il existe, alors tu n'insère pas la ligne. Tu trouves une formule pour que l'identifiant soit généré automatiquement en fonctions des données récupérées de ton flux XML. Comme cela, s'il existe déjà un identifiant identique, tu es certain que toutes les autres données le seront aussi.

  5. #5
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Par défaut
    jai déjà un champ identifiant pour ma base mais c un autoincrément unique
    le problème c'est que je compare une liste d'articles d'un flux XML avec une liste dans une table sql

    c'est comme si je comparai tout les élément d'une table avec tout les éléments d'une autre pour ajouter dans la seconde ceux qu'il manque,

    et je ne voie pas comment optimiser cela de façon algorithmique
    aurais tu une piste?

Discussions similaires

  1. [SQL] Optimisation d'une requête
    Par Sayrus dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 11/12/2007, 20h57
  2. [SQL] Optimisation de mes requêtes SQL
    Par webAbsolu dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/10/2007, 16h54
  3. [PL/SQL] Optimisation d'une requête (like?)
    Par elyo66 dans le forum SQL
    Réponses: 15
    Dernier message: 01/06/2007, 19h44
  4. Optimisation de requêtes SQL - utilisation de IN SELECT
    Par cfeltz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/12/2006, 09h28
  5. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55

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