A voir également:
- Améliorer les performances du script PHP
- Tester les performances de son pc - Guide
- Script vidéo youtube - Guide
- Easy php - Télécharger - Divers Web & Internet
- Comment voir les performances de son pc - Guide
- Performances optimales windows 10 - Guide
3 réponses
flokocha
Messages postés
1510
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 octobre 2015
281
Modifié par flokocha le 12/03/2014 à 13:31
Modifié par flokocha le 12/03/2014 à 13:31
Salut,
Ce qui est coûteux dans ton script, c'est le fait de réaliser en boucle une requête basée sur un like.
La solution que je te propose, c'est de stocker directement dans ta base l'information correspondant aux 7 derniers chiffres des IMSI contenus dans ta table. Cela peut se faire par exemple via une nouvelle colonne dans la table qui contient les IMSI et les MDN, ou dans une table à part qui ferait la relation entre ces 7 derniers chiffres et un index de ta table d'origine, et qui pourrait être alimentée automatiquement par un trigger.
Ainsi tu te passes de ces like très coûteux, ce qui est déjà un premier gain considérable.
Pour aller plus loin, tu peux aussi te passer de ta boucle. Pour cela tu peux loader ton fichier en base dans une table dédiée, via l'intruction mysql LOAD DATA LOCAL INFILE. Soit en le formatant au préalable en local pour lui ajouter une colonne ne contenant que les 7 derniers chiffres de ton IMSI, ou soit à nouveau en créant un trigger en base qui ajoute cette information automatiquement à chaque insertion.
Il te suffira ensuite de tout récupérer en une seule requête, en réalisant une jointure entre tes deux tables.
PS : Une autre solution pourrait être d'effectuer l'opération strictement inverse : c'est à dire qu'au lieu de tout rassembler sur ta base pour pouvoir réaliser ta jointure en une seule fois, tu rassemblerais toutes tes infos en local pour pouvoir réaliser cette jointure. La logique est la même, mais les outils à employer seront différents.
Ce qui est coûteux dans ton script, c'est le fait de réaliser en boucle une requête basée sur un like.
La solution que je te propose, c'est de stocker directement dans ta base l'information correspondant aux 7 derniers chiffres des IMSI contenus dans ta table. Cela peut se faire par exemple via une nouvelle colonne dans la table qui contient les IMSI et les MDN, ou dans une table à part qui ferait la relation entre ces 7 derniers chiffres et un index de ta table d'origine, et qui pourrait être alimentée automatiquement par un trigger.
Ainsi tu te passes de ces like très coûteux, ce qui est déjà un premier gain considérable.
Pour aller plus loin, tu peux aussi te passer de ta boucle. Pour cela tu peux loader ton fichier en base dans une table dédiée, via l'intruction mysql LOAD DATA LOCAL INFILE. Soit en le formatant au préalable en local pour lui ajouter une colonne ne contenant que les 7 derniers chiffres de ton IMSI, ou soit à nouveau en créant un trigger en base qui ajoute cette information automatiquement à chaque insertion.
Il te suffira ensuite de tout récupérer en une seule requête, en réalisant une jointure entre tes deux tables.
PS : Une autre solution pourrait être d'effectuer l'opération strictement inverse : c'est à dire qu'au lieu de tout rassembler sur ta base pour pouvoir réaliser ta jointure en une seule fois, tu rassemblerais toutes tes infos en local pour pouvoir réaliser cette jointure. La logique est la même, mais les outils à employer seront différents.
Merci pour votre réponse.
J'ai opté pour votre approche, je peux insérer les 7 derniers chiffres de chaque nombre de mon fichier texte dans une table de traitement.
Maintenant comment je peux faire pour récupérer les IMSI dont les 7 derniers chiffres sont semblables à ces chiffres de la table de traitement ainsi que les MDN de correspondants à ces IMSI.
S'il vous plait aidez moi, je suis nouveau en php. Je ne connais pas.
Merci d'avance.
J'ai opté pour votre approche, je peux insérer les 7 derniers chiffres de chaque nombre de mon fichier texte dans une table de traitement.
Maintenant comment je peux faire pour récupérer les IMSI dont les 7 derniers chiffres sont semblables à ces chiffres de la table de traitement ainsi que les MDN de correspondants à ces IMSI.
S'il vous plait aidez moi, je suis nouveau en php. Je ne connais pas.
Merci d'avance.
Maintenant comment afficher les résultats ?
Voici ce que j'ai fait :
Voici l'erreur qu'il m'affiche:
La colonne ESN1 de la table updateesn1 est bien rempli ainsi que les colonnes IMSI et MDN de coordab.
Comment faire pour visualiser les resultats ?
S'il vous plait aidez moi encore.
Merci.
Voici ce que j'ai fait :
<?php set_time_limit(0); try { $bdd = new PDO('mysql:host=localhost;dbname=gestnum', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT IMSI, MDN, ESN1 FROM 'coordab' r INNER JOIN 'updateesn1' i ON RIGHT(r.'IMSI', 7) = RIGHT(i.'ESN1', 7)'); while ($donnees = $reponse->fetch()) { echo $donnees['ESN1'] . ' appartient à ' . $donnees['IMSI'] . '<br />'; } $reponse->closeCursor(); ?>
Voici l'erreur qu'il m'affiche:
! ) Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\etudephp\recyclage.php on line 21
La colonne ESN1 de la table updateesn1 est bien rempli ainsi que les colonnes IMSI et MDN de coordab.
Comment faire pour visualiser les resultats ?
S'il vous plait aidez moi encore.
Merci.