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

Langage PHP Discussion :

[Tableaux] optimisation pour grosse quantité


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Par défaut [Tableaux] optimisation pour grosse quantité
    bonjour à tous

    je récupère de différentes tables des données (n° de cadeau et quantité)
    j'insère le tout dans un tableau et je tri le tableau de manière à savoir quels sont les cadeaux les plus commandés
    voici mon code
    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
    $sql = $ewp->sqlQuery	("SHOW TABLE STATUS FROM commandes");
    while ($o = $ewp->sqlGetObj($sql))
    {
    	$sql2	=	 $ewp->sqlQuery ("SELECT kdo, qte, points, commande FROM commandes.".$o->Name."");
    	while ($o2 = $ewp->sqlGetObj($sql2))
    	{
    		//... du code pour faire des stats....
     
    		//PARTIE QUI NOUS INTERESSE - ajout de la quantité pour calculer le classement par articles
    		for ($j=0; $j < $o2->qte; $j++)
    			array_push	($tab, $o2->kdo);
    	}
    }
     
    //tri du tableau par nombre de kdo
    $tabKDO	=	array_count_values($tab);
    //ajoute dans un tableau pour trier
    foreach($tabKDO as $cle=>$valeur)
        $tab[]	=	array("nb" => $valeur, "kdo" => $cle);
    //tri du tableau en décroissant
    rsort($tab);
    cela fonctionne très bien
    sauf que d'ici très peu de temps j'aurai surement des milliers voir des centaines de milliers de lignes et j'ai peur que ma façon de trier soit un peu larguée une fois que j'aurai des grosses quantités

    j'aimerai donc savoir si vous auriez une meilleure solution à me proposer

    en vous remerciant d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Salut,

    si tu nous donne ton schéma de base de données, j'ose espérer et penser que l'on pourra te proposer une requete pour faire TOUT cela.

    Mais là, non je ne sais pas. désolé. Et en faits je pense que ton code, c'est re faire tout ce que le SGBD sait faire mieu que toi, ou moi.

    bye

  3. #3
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2006
    Messages : 317
    Par défaut
    Oui, ORDER BY et GROUP BY beneficie de 30 d'ans d'experience en SQL.
    Ton code beneficie de 10 ans d'optimisations de PHP.(ils ont interet à avoir largement dépassé le C en vitesse pour rattraper ton algorithme tres basique)

    Restons serieux, tu reinventes la roue (meme je dirai la roue carrée) la.
    Ce genre de resultat, MySQL est capable de te le donner tres rapidement meme sur un grand nombre de requete si :
    - ton shéma de table est bon
    - ta requete est bonne

    Poste les 2 (en modifiant les noms et les prefixes de tables surtout, un forum c'est persistant)

    On pourra surement t'aider

  4. #4
    Membre éclairé Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Par défaut
    ben le problème c'est que je ne vois pas comment en SQL on peut faire une requête de ce genre puisque l'on doit d'abord lister toutes les tables d'une base
    puis ensuite pour chaque table faire le compte des cadeaux
    je sais que le tri peut se faire facilement via SQL, mais moi ce qui m'embête c'est surtout cette première requête qui liste mes tables
    cela ne se passerait que sur une table il n'y aurait pas soucis, mais là ...


  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Tu as ce probleme parce que ton schema est tout pourri... Des tables dont le nom est dynamique, ca va bien a la limite pour des tables d'archivages (et encore...) mais pour des tables de travail c'est pas top.

    Pourquoi pas une seule table avec un champ supplementaire qui correspondrait au contenu de $o->Name dans ton code ??

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    C'est clairement pourri, et je n'osais trop y croire...
    Mais rien n'empeche de construire la requete dynamiquement. Ce sera toujours plus rapide et plus optimisé que de procéder tels que tu le fais actuellement.

    Sinon, une autre solution est de créer une table de travail. Cette table de travail va te servir à enregistrer les informations récoltées dans les différentes tables. Ensuite seulement tu commences à calculer ce qui t'interessent, via des requetes.
    C'est ce que je fais par exemple pour des stats.

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

Discussions similaires

  1. Cherche grosse quantité de données pour entrainement.
    Par berceker united dans le forum Approche théorique du décisionnel
    Réponses: 4
    Dernier message: 17/09/2014, 14h17
  2. Réponses: 19
    Dernier message: 06/11/2010, 23h07
  3. Réponses: 6
    Dernier message: 26/05/2010, 10h15
  4. [Tableaux] Difficulté pour une incrémentation....
    Par MauriceG dans le forum Langage
    Réponses: 8
    Dernier message: 19/09/2005, 18h53
  5. Besoin de routines ASM optimisées pour Delphi
    Par John Fullspeed dans le forum x86 32-bits / 64-bits
    Réponses: 11
    Dernier message: 08/12/2004, 22h00

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