requete composée dynamiquement

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 : requete composée dynamiquement

Re: requete composée dynamiquement

par Gico » 08 nov. 2010, 00:23

Merci, je bosse dessus et ça semble repondre à mes besoins. En tous cas, j'apprend une methode que je ne connaissais pas. Merci encore

Re: requete composée dynamiquement

par Cyrano » 07 nov. 2010, 10:35

Une requête en boucle ??? tss tss ! :non: Si la première requête retourne 5000 lignes de résultat, ça va être joli coté performances...

Suggestion avec une seule et unique requête :
<?php
// La requête SQL unique
$sql  = "SELECT p.IDattribu, p.valeure, l.IDproduct, l.IDtypeAttribut
         FROM product_attributs p
           LEFT JOIN lk_attribut_product l USING(nom_du_champ_liant_les_deux_tables)
           LEFT JOIN maTable t ON p.IDTypeAttribut = t.IDType
         ORDER BY l.IDtypeAttribut";
$exec = mysql_query($sql);
// On crée un point de repère pour les groupes
$idt = '';
$result = array();
// Maintenant on boucle sur le retour :
while(false !== ($row = mysql_fetch_array($exec)))
{
    // Si le groupe du tour en cours est différent du point de repère, on
    // mt à jour le point de repère.
    if($idt != $row['IDtypeAttribut'])
    {
        $idt = $row['IDtypeAttribut'];
        $row['IDtypeAttribut'] = array();
    }
    $row[$idt][] = $row;
}

echo '<pre>';
print_r ($result);
echo '</pre>';
Avec une jointure supplémentaire et une clause ORDER BY, on va obtenir la même chose.

Re: requete composée dynamiquement

par Nours312 » 06 nov. 2010, 23:33

pas de problemes ;)
$result = array() ;
$sql1 = "SELECT IDtype FROM maTable" ;
$query = mysql_query($sql1);
while($row = mysq_fetch_array($query) ){
  /// c'est ici que l'on va créer nos tabeaux en charge de recevoir les resultats ::
  $result[$row['IDtype']] = array() ;
  $sql2 = "SELECT p.IDattribu, p.valeure, l.IDproduct, l.IDtypeAttribut
                           FROM product_attributs p
                                     LEFT JOIN lk_attribut_product l USING(nom_du_champ_liant_les_deux_tables)
                           WHERE p.IDtypeAttribut=".$row['IDtype'] ;
  $query2 = mysql_query($sql2) ;
  while($rows2 = mysql_fetch_array($query2) ) {
      // et là on le rempli ... 
      $result[$row['IDtype']][] = $rows2 ;
  }
}
echo '<pre>' ;
print_r($result) ;
echo '</pre>' ;
c'est pas plus compliqué que ça :D

Re: requete composée dynamiquement

par Gico » 06 nov. 2010, 22:52

Je pense que je pige ta reponse et je t'en remerçie, mais de cette façon je récupère tous les resultats dans un même tableau il me semble, alors que je voudrais pouvoir identifier chaque groupe de résultat, les grouper en fonction de $row['IDtype'] afin d'alimenter un formulaire avec des groupes de case à cocher:
Attribut 1 ($row['IDtype']=1) :
valeur 1
valeur 2

Attribut 2 ($row['IDtype'=2) :
valeur 1
valeur 2
valeur 3

etc etc

merci encore

Re: requete composée dynamiquement

par Nours312 » 06 nov. 2010, 20:19

oki !...

donc tu as une premier requete du style :
$result = array() ;
$sql1 = "SELECT IDtype FROM maTable" ;
$query = mysql_query($sql1);
while($row = mysq_fetch_array($query) ){
  $sql2 = "SELECT p.IDattribu, p.valeure, l.IDproduct, l.IDtypeAttribut 
                           FROM product_attributs p
                                     LEFT JOIN lk_attribut_product l USING(nom_du_champ_liant_les_deux_tables)
                           WHERE p.IDtypeAttribut=".$row['IDtype'] ;
  $query2 = mysql_query($sql2) ;
  while($rows2 = mysql_fetch_array($query2) ) {
      $result[] = $rows2 ;
  }
}
echo '<pre>' ;
print_r($result) ;
echo '</pre>' ;
test ça déja ;)

attention au nom du champ utilisé dans USING !...

@++

Re: requete composée dynamiquement

par Gico » 06 nov. 2010, 19:41

je crois comprendre la remarque de poppy même s'il aurait été plus cordial de simplement me signaler un oubli dans ma requête ( voir plus bas)
Je vais essayer d'être plus clair, les tables n'ont pas trop d'importance.
j'ai une première requête sur une premiere table qui me fournie une serie de resultats, je voudrais, dans un second temps, que cette serie de résultat alimente une serie de requetes. Les resultats de la premiere requete me sont inconnus. Donc la serie de requete doit etre construire à la volée dans une boucle sur les resultats de la requete 1, en incrémentant les noms de chaque variable, mais ça ne fonctionne pas car je n'arrive pas a créer ces requetes à la "volée"

ex: resultat de la requete 1: $row_rsRequete1['IDtype']

$query_rsproduct_attributs1 = "SELECT product_attributs.IDattribu, product_attributs.valeure, lk_attribut_product.IDproduct, lk_attribut_product.IDtypeAttribut FROM product_attributs WHERE product_attributs.IDtypeAttribut=".$row_rsRequete1['IDtype'];
$rsproduct_attributs1 = mysql_query($query_rsproduct_attributs1, $baz) or die(mysql_error());
$row_rsproduct_attributs1 = mysql_fetch_assoc($rsproduct_attributs1);
puis
$query_rsproduct_attributs2 = "SELECT product_attributs.IDattribu, product_attributs.valeure, lk_attribut_product.IDproduct, lk_attribut_product.IDtypeAttribut FROM product_attributs WHERE product_attributs.IDtypeAttribut=".$row_rsRequete1['IDtype'];
$rsproduct_attributs2 = mysql_query($query_rsproduct_attributs2, $baz) or die(mysql_error());
$row_rsproduct_attributs2 = mysql_fetch_assoc($rsproduct_attributs2);

puis
 $query_rsproduct_attributs3="...
merci

Re: requete composée dynamiquement

par popy » 06 nov. 2010, 11:54

Ben, si ça peut lui ouvrir les yeux, ça l'aidera.

Re: requete composée dynamiquement

par Nours312 » 06 nov. 2010, 00:40

Ben, deja, la requete "dynamiquement construite", c'est toujours la même.

En fait, on appelle ça "statique".
dans tous les cas, je ne penses pas que votre remarque soit percutante ni ne fasse avancer le shmilBlic !...

Re: requete composée dynamiquement

par Nours312 » 06 nov. 2010, 00:39

Bonjour je voudrais composée des requêtes dynamiquement à l'aide d'une boucle ( sur une autre requete)...mais ça fonctionne pas, j'ai essayé avec des noms de variable dynamiques

$i=1
do{ 
// noms des variables dynamiques
$$query_rsproduct_attributs='$query_rsproduct_attributs'.$i;
$$rsproduct_attributs='$rsproduct_attributs'.$i;
$$row_rsproduct_attributs ='$row_rsproduct_attributs'.$i;
$$totalRows_rsproduct_attributs='$totalRows_rsproduct_attributs'.$i;

//la requete
mysql_select_db($database_baz, $baz);
$$query_rsproduct_attributs = "SELECT product_attributs.IDattribu, product_attributs.valeure, lk_attribut_product.IDproduct, lk_attribut_product.IDtypeAttribut FROM product_attributs WHERE product_attributs.IDtypeAttribut=1";
$$rsproduct_attributs = mysql_query($$query_rsproduct_attributs, $baz) or die(mysql_error());
$$row_rsproduct_attributs = mysql_fetch_assoc($$rsproduct_attributs);

 $i++;

} while($row_rs_SelectTypes = mysql_fetch_assoc($rs_SelectTypes));
Merci

peux tu décrire les tables de ta BDD (un imprim ecran de phpMyAdmin au mieux ^^)
et bien expliquer ce que tu cherche à extraire comme informations STP :D

Re: requete composée dynamiquement

par popy » 05 nov. 2010, 23:31

Ben, deja, la requete "dynamiquement construite", c'est toujours la même.

En fait, on appelle ça "statique".

Re: requete composée dynamiquement

par Gico » 05 nov. 2010, 22:02

pourquoi cette remarque ? si j'en connais pas mal, mais pas tout.

Re: requete composée dynamiquement

par popy » 05 nov. 2010, 21:28

En fait toi t'y connais rien en php ?

requete composée dynamiquement

par Gico » 05 nov. 2010, 21:03

Bonjour je voudrais composée des requêtes dynamiquement à l'aide d'une boucle ( sur une autre requete)...mais ça fonctionne pas, j'ai essayé avec des noms de variable dynamiques

$i=1
do{ 
// noms des variables dynamiques
$$query_rsproduct_attributs='$query_rsproduct_attributs'.$i;
$$rsproduct_attributs='$rsproduct_attributs'.$i;
$$row_rsproduct_attributs ='$row_rsproduct_attributs'.$i;
$$totalRows_rsproduct_attributs='$totalRows_rsproduct_attributs'.$i;

//la requete
mysql_select_db($database_baz, $baz);
$$query_rsproduct_attributs = "SELECT product_attributs.IDattribu, product_attributs.valeure, lk_attribut_product.IDproduct, lk_attribut_product.IDtypeAttribut FROM product_attributs WHERE product_attributs.IDtypeAttribut=1";
$$rsproduct_attributs = mysql_query($$query_rsproduct_attributs, $baz) or die(mysql_error());
$$row_rsproduct_attributs = mysql_fetch_assoc($$rsproduct_attributs);

 $i++;

} while($row_rs_SelectTypes = mysql_fetch_assoc($rs_SelectTypes));
Merci