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

PHP & Base de données Discussion :

Regrouper les résultats d'une requete selon un attribut avec PDO [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Par défaut Regrouper les résultats d'une requete selon un attribut avec PDO
    Bonjour a tous,

    Voila mon petit probleme. Je souhaiterais regrouper les résultats d'une mes requetes en fonction d'un attribut commun.
    Par exemple, j'ai une table protéine ou je sélectionne "id_Prot" et "organisme".
    Je souhaiterais regrouper tous les id_Prot qui ont le meme organisme.

    Voici ma requete qui marche (testé sur phpMyAdmin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req_Dom_Gen1= $db->prepare(("SELECT DISTINCT PROTEINE.organisme, PROTEINE.id_Prot, OCC_NVDC_PAR_DC.id_Prot FROM PROTEINE, OCC_NVDC_PAR_DC WHERE OCC_NVDC_PAR_DC.id_Dom = '$domaine' AND OCC_NVDC_PAR_DC.FDR <= '20' AND PROTEINE.id_Prot=OCC_NVDC_PAR_DC.id_Prot ORDER BY PROTEINE.organisme ASC")); 
    $req_Dom_Gen1->execute();
    Ensuite j'ai fait ceci en PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump ($req_Dom_Gen1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));
    ce qui donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    array(4) { 
    ["AMP-dependent protein kinase type I-beta regulatory subunit, putative "]=> array(1) { [0]=> string(12) "TVAG_103080 " } 
    ["Leishmania_braziliensis "]=> array(1) { [0]=> string(15) "LbrM09_V2.1600 " } 
    ["Toxoplasma_gondii_GT1 "]=> array(1) { [0]=> string(13) "TGGT1_087640 " } 
    ["Trypanosoma_brucei_gambiense "]=> array(4) { [0]=> string(13) "Tbg972.1.760 " 
                                                   [1]=> string(14) "Tbg972.9.1480 " 
                                                   [2]=> string(14) "Tbg972.6.3320 " 
                                                   [3]=> string(14) "Tbg972.3.5620 " } }

    J'ai donc bien regroupé les id_Prot en fonction de leur organisme mais le probleme que j'ai maintenant, c'est comment récuperer l'organisme et l'id_Prot et les afficher proprement comme ceci par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    AMP-dependent protein kinase type I-beta regulatory subunit, putative :
    TVAG_103080
     
    Trypanosoma_brucei_gambiense:
    Tbg972.1.760 
    Tbg972.9.1480 
    Tbg972.6.3320
    Tbg972.3.5620
    J'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while ($result=$req_Dom_Gen1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));
    {
    echo $result['organisme'];
     
    echo $result['id_Prot'];
     
    }
    mais cela m'affiche l'organisme a chaque fois pour l'id_Prot, quand bien meme ces id_Prot ont le meme organisme.

    Si vous pouviez m'aider, je vous en serai reconnaissante car cela fait 2 jours que je bloque dessus et j'ai vraiment tout essayé....

    Merci a vous.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Avec des (deux) foreach imbriqués :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $res = $req_Dom_Gen1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
     
    foreach ($res as $k => $a) {
        printf('<h1>%s</h1>', $k);
        echo '<ul>';
        foreach ($a as $v) {
            printf('<li>%s</li>', $v);
        }
        echo '</ul>';
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Par défaut
    Citation Envoyé par julp Voir le message
    Avec des (deux) foreach imbriqués :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $res = $req_Dom_Gen1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
     
    foreach ($res as $k => $a) {
        printf('<h1>%s</h>', $k);
        echo '<ul>';
        foreach ($a as $v) {
            printf('<li>%s</li>', $v);
        }
        echo '</ul>';
    }


    C'est merveilleux!!! cela marche parfaitement bien!!! Je t'en remercie car tu viens d'enlever un gros poids sur mes epaules../
    Merci a toi julp, merci merci et merci a ce super site

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Par défaut
    Rebonjour,

    Je me posais la question: si je veux regrouper les résultats de deux requetes différentes selon un meme attribut commun, est ce que c'est possible?

    Par exemple, en reprenant la requete précédente:

    1ere requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_Dom_Gen= $db->query(("SELECT DISTINCT PROTEINE.organisme, PROTEINE.id_Prot, OCC_DC.id_Prot FROM PROTEINE, OCC_DC WHERE OCC_DC.id_Dom = '$domaine' AND PROTEINE.id_Prot=OCC_DC.id_Prot ORDER BY PROTEINE.organisme ASC"));
    2eme requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req_Dom_Gen1= $db->query(("SELECT DISTINCT PROTEINE.organisme, PROTEINE.id_Prot, OCC_NVDC_PAR_DC.id_Prot FROM PROTEINE, OCC_NVDC_PAR_DC WHERE OCC_NVDC_PAR_DC.id_Dom = '$domaine' AND OCC_NVDC_PAR_DC.FDR <='$FDR' AND PROTEINE.id_Prot=OCC_NVDC_PAR_DC.id_Prot ORDER BY PROTEINE.organisme ASC
    Et voici ce que j'ai essayé de faire en m'inspirant du code précédent de julp, pour regrouper les résultats selon l'attribut "organisme":

    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
    $res = $req_Dom_Gen->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
    $res1 = $req_Dom_Gen1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
     
    foreach ($res as $k => $a) {
    printf ('<h1>%s</h1>','<center>'.$k.'</center>');
    echo '<ul>';
    echo '<h2><center>Occurrences Connues:</h2></center>';
     
    foreach ($a as $v) {
    $id=substr($v,0,-1);
     
    printf ('<li>%s</li>',"<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/".$id.".html\">".$id."</a>"."></center>");
    }
    echo '</ul>';
    echo '<h2><center>Nouvelles Occurrences:</h2></center>';
     
    foreach ($res1 as $k1 => $a1) {
    foreach ($a1 as $v1) {
    if($k1==$k)
    {printf('<li>%s</li>', "<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/".$v1.".html\" >".$v1."</a>"."></center>");}
    }
    echo '</ul>';
    }
     
    }
    Mais cela n'affiche pas les résultats de la 2eme requete, seulement ceux de la 1ere (quand bien meme les 2 requetes marchent individuellement) et je ne vois pas vraiment ou est l'erreur

    Avez vous une idée s'il vous plait?

    Merci a vous.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Par défaut
    J'ai aussi essaye avec un array_merge mais cela ne m'affiche toujours pas les resultats de la seconde requete c'est frustrant...

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

Discussions similaires

  1. [Toutes versions] Regrouper sous forme d'une seule chaine les résultats d'une requete
    Par dacid dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 22/09/2009, 09h39
  2. récupérer les résultats d'une requete hql
    Par aymen007 dans le forum Hibernate
    Réponses: 5
    Dernier message: 23/08/2007, 17h19
  3. [SQL] Comment je peux mettre les résultat d'une requete dans un fichier
    Par Maria1505 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 10/12/2006, 21h44
  4. Réponses: 3
    Dernier message: 04/07/2006, 16h34
  5. Réponses: 1
    Dernier message: 13/04/2005, 14h41

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