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

Bibliothèques et frameworks PHP Discussion :

[PEAR][DB] Query en cascade


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut [PEAR][DB] Query en cascade
    Je souhaites reutiliser l'output d'une requete SQL (sql1) dans une autre requete SQL(sql2) mais la second requet (sql2) ne traite que la premiere valeur genere par la premiere Requete(sql1).




    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
    22
    23
    24
    25
    require_once('DB.php');
             	$dsn = $db2connect;
             	$db = DB::connect($dsn);
     
             	$sql ="SELECT valeur                    
    FROM db.table WHERE valeur2 = 'something'";
     
             	$q = $db->query($sql);
             	if (DB::iserror($q)) { $q->getMessage(); } else {
    		while ($q->fetchInto($row)){ 
     
               echo $row[0]; //list1
     
             $sql2 ="SELECT valeur3           
    FROM db.table2 
    WHERE valeur ='".$row[0]."'
    GROUP BY PKG_NAME;";
             	$q = $db->query($sql2);
             	if (DB::iserror($q)) { $q->getMessage(); } else {
    		while ($q->fetchInto($row)) {
     
     
    		echo $row[0];/list2
     
        }}}}

    si je fait un echo sur la "list1" sans inclure "sql2" j'obtient:

    val10,val11,val12,val13,val14,val15,val16,etc...

    mais lorsque je veux utiliser ces valeurs avec sql2
    je n'obtient que val10 et sql2 ne fourni les valeurs que pour la donner val10.Il me faudrais les donner pour val11,val12, etc...

    merci

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    parce que tu écrases tes variables ($q, $row)

    Sinon tu connais les jointures ? ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
    FROM t1, t2
    WHERE t1.val = t2.val
    AND t1.val = 'something'
    Vala, en une requete tu fais ce que tu veux 8)

  3. #3
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    ben je sens que je vais m'amuser car SQL1 utilise deja des jointure.
    sql1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql ="SELECT joint1.val1                    
    FROM t1 joint1 INNER JOIN t2 joint2             
    ON joint1.val2 = joint2.val2 
    AND val3 = '.$variable.'
    AND val1 LIKE 'popo%'   
    GROUP BY joint1.val1;"
    sql2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql2 ="SELECT val21           
    FROM t1 
    WHERE val22='".$row[0]."'
    GROUP BY val21;"

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Ben si tu y arrive pas avec une seule requete fais en deux, mais gaffe à n pas ecraser la première requete ^^

  5. #5
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    J'ai separe les deux.Si je fait $var1 = row[0]
    cela ecrase encore le resultat de la requete car cela me renvoie seulement
    la premier valeur du "row"...Je craind ne pas savoir recuperer proprement
    "row[0]".
    Lorsque je regarde a cet exemple
    l'echo ce fait directement sur "row[0]" .
    Donc ma question est comment puis je recuper et reutiliser "row[0]".
    A partir du code ci-dessous
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
     
    require_once('DB.php');
             	$dsn = $db2connect;
             	$db = DB::connect($dsn);
     
     
             	$sql ="SELECT joint1.val1                   
    FROM t1 joint1 INNER JOIN t2 joint2             
    ON joint1.val2 = joint2.val2
    AND val3 = '.$variable.'
    AND val1 LIKE 'popo%'   
    GROUP BY joint1.val1;";
     
             	$q = $db->query($sql);
             	if (DB::iserror($q)) { $q->getMessage(); } else {
    		while ($q->fetchInto($row)){$var1 = $row[0];}
     
                    echo $var1;}
     
     
             $sql2 ="SELECT val21           
    FROM t1
    WHERE val22='".$var1."'
    GROUP BY val21;";
     
             	$q = $db->query($sql2);
             	if (DB::iserror($q)) { $q->getMessage(); } else {
    		while ($q->fetchInto($row)) {$var2 =$row[0];}
     
     
    		echo $var2;}
     
    ?>

  6. #6
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 13
    Par défaut
    voila j'ai reussi a faire la jointure , tres facilement .En fait j'ai pas fais attention j'utilisais dans sql2"WHERE val22='".$row[0]." au lieu de "WHERE val22 in '".$row[0]."'.

    au finish
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $sql2 ="SELECT val21           
    FROM t1
    WHERE val22= (SELECT joint1.val1                   
    FROM t1 joint1 INNER JOIN t2 joint2             
    ON joint1.val2 = joint2.val2
    AND val3 = '.$variable.'
    AND val1 LIKE 'popo%'   
    GROUP BY joint1.val1)
    GROUP BY val21;"
    et ca fonctionne tres bien .THX

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

Discussions similaires

  1. PHP query with DB package PEAR
    Par taki.said dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/02/2009, 07h21
  2. Query Begin et Commit son sur un bateau....
    Par faoz75 dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/08/2003, 11h48
  3. Je ne retrouve pas ma SP dans Query analyser
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/07/2003, 12h43
  4. Query data set
    Par Sandra dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/01/2003, 10h08
  5. [XMLRAD] Décoder Request.Query
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 8
    Dernier message: 10/01/2003, 16h40

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