Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/08/2007, 19h56   #1
Membre à l'essai
 
Inscription : mars 2003
Messages : 44
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2003
Messages : 44
Points : 20
Points : 20
Envoyer un message via MSN à emile13
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 :
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);
					}
				}
			}
 
		}
?>
emile13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2007, 20h18   #2
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
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.
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2007, 20h31   #3
Membre à l'essai
 
Inscription : mars 2003
Messages : 44
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2003
Messages : 44
Points : 20
Points : 20
Envoyer un message via MSN à emile13
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?
emile13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2007, 20h35   #4
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
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.
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2007, 21h48   #5
Membre à l'essai
 
Inscription : mars 2003
Messages : 44
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mars 2003
Messages : 44
Points : 20
Points : 20
Envoyer un message via MSN à emile13
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?
emile13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h07.


 
 
 
 
Partenaires

Hébergement Web