Opimisation de requete.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Opimisation de requete.

par dunbar » 14 oct. 2008, 20:53

Effectivement tu a bien compris.
Je te remercie
A+ :wink:

par fab » 14 oct. 2008, 20:41

En fait si je comprends bien

Code : Tout sélectionner

FROM ampli_lm AS lm, ampli_dt AS dt WHERE dt.noeud_dt = lm.noeud
Serai l'équivalent d'un :

Code : Tout sélectionner

FROM ampli_lm lm LEFT JOIN ampli_dt dt ON ( dt.noeud_dt = lm.noeud )
Dans ce cas essaye :

Code : Tout sélectionner

FROM ampli_lm lm LEFT OUTER JOIN ampli_dt dt ON ( dt.noeud_dt = lm.noeud )

Opimisation de requete.

par dunbar » 14 oct. 2008, 18:39

Bonjour,
au départ pour mes test et surtout pour aller vite j'ai deux requetes
ici :
$sql_noeud = "SELECT
                           noeud,
                        COUNT(distinct id_lm)
                        AS total
                        FROM
                          ampli_lm
                        GROUP BY noeud
                        LIMIT ".$limite." , ".$nombre."";


                         $result = mysql_query($sql_noeud) or die ('Ne trouve pas toutes les données : '.mysql_error());
                         $total = mysql_num_rows($result);
Elle va chercher les parents (ampli_lm)
puis celle-ci
$sql_dt = "SELECT
                            COUNT(noeud_dt)
                            AS total_dt
                        FROM
                          ampli_dt
                        WHERE noeud_dt  = '".$noeud."'";
                         $result_dt = mysql_query($sql_dt) or die ('Ne trouve pas toutes les données de la table distribution: '.mysql_error());

                         while($row_dt = mysql_fetch_assoc($result_dt)){
                         $nbrdt = $row_dt['total_dt'];
                         }
elle recherche les enfants (ampli_dt) des parents.
Mais dans un soucis d'optimisation et bien faire les choses j'essaye de ne plus faire qu'une seule requete
comme ceci
$sql_noeud = "SELECT
                           lm.noeud, COUNT(distinct lm.id_lm)
                        AS total,
                           dt.noeud_dt, COUNT(distinct dt.id_dt)
                        AS total_dt
                        FROM
                          ampli_lm AS lm, ampli_dt AS dt
                        WHERE dt.noeud_dt = lm.noeud
                        GROUP BY dt.noeud_dt, lm.noeud
                        LIMIT ".$limite." , ".$nombre."";
Et là elle fonctionne presuqe bien :roll:
elle ne va pas chercher les parents ci il n'y a pas d'enfants :-k
Qui verais mon erreur :?:

D'avance merci