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 :

Un foreach qui n'affiche qu'un seul resultat


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut Un foreach qui n'affiche qu'un seul resultat
    Bonjour a tous,

    Je reviens a vous car j'ai un autre petit probleme.
    J'ai deux requetes qui me permettent de recuperer l'id_Prot dune table OCC_DC (occurrence connue) pour la 1ere requete et dune table OCC_NVDC_PAR_DC (nouvelle occurrence) pour la 2eme requete:

    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
       //Requete pour les occurrences connues
       $req_Dom_Gen = $db->query(("SELECT DISTINCT PROTEINE.organisme, 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"));
     
     
       //Requete pour les nouvelles occurences certifiees par les domaines connus
       $req_Dom_Gen1 = $db->query(("SELECT DISTINCT PROTEINE.organisme, 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")); 
     
       //On va regrouper les requetes selon la cle organisme dans un tableau que l'on va trier
       $res = $req_Dom_Gen->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
       $res1 = $req_Dom_Gen1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);
    je classe les id_Proteine de la table OCC_DC et OCC_NVDC_PAR_DC en fonction de l'organisme (cela c'est fait).
    Le truc, c'est qu'un id_Prot de la table OCC_DC peut aussi appartenir a la table OCC_NVDC_PAR_DC.
    Donc en plus, je dois faire un test pour chaque id_Prot de la table OCC_DC, a savoir s'il appartient aussi a la table OCC_NVDC_PAR_DC.
    Pour cela pas de probleme, la requete marche tres bien.
    Donc si l'id_Prot appartient aux 2 tables, je fais un lien vers une page html (pour cela pas de pb non plus)
    Par contre si l'id_Prot appartient que a la table OCC_DC, je fais une requete en fonction de l'organisme a laquelle il appartient pour afficher un autre lien que je recupere de la table WEB_ORGANISM et la je n'arrive a afficher que le lien du 1er organisme et pas les autres (decidement j'ai toujours le meme probleme).

    Voici mon code php:

    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
    35
    36
    37
    38
    39
    40
    41
      foreach($res as $k=>$a) { //$k est l'organisme
              printf ('<h1>%s</h1>','<center><div style="color:#FF0000;">'.$k.'</center></div>');
     
              echo '<h2><center><div style="color:#0000FF;">Known Occurrences:</h2></center></div>';
     
             //On recupere le lien de chaque organisme
             $lienOrg = $db->query(("SELECT DISTINCT WEB_ORGANISM.adresseWebOrg_debut, WEB_ORGANISM.adresseWebOrg_fin
                                                 FROM WEB_ORGANISM
                                                 WHERE WEB_ORGANISM.organisme= '$k'"));   
     
                       foreach ($lienOrg as $lien)
                           {  
                           $adresseDebutOrg=$lien['adresseWebOrg_debut'];
    		       $adresseFinOrg=$lien['adresseWebOrg_fin'];	
                           }
     
     
                     foreach ($a as $v) { //$v est l'id_Proteine
                     //On teste si l'id proteine que l'on recupere contient des nouvelles occurrences
                     $testProtC = $db->query(("SELECT *
                                              FROM OCC_NVDC_PAR_DC
                                              WHERE id_Prot= '$v'"));
     
    	         $nbRowC= $testProtC->rowCount();
     
    		 //Si aucune occurrence, on affiche le lien de l'organisme
                     if  ($nbRowC == 0) 
     
                         {   
                         $adresseOrg =$adresseDebutOrg.$v.$adresseFinOrg;
                         printf('<li>%s</li>',"<center><"."<a href=\"$adresseOrg\">$v</a>"."></center>"); 
     
                          }//Sinon on affiche la page html des Nouvelles Occurrences
     
                     else
     
               	     printf ('<li>%s</li>',"<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/$v.html\">$v</a>"."></center>"); 
     
                    }
     
       }
    Donc, pour chaque $v (=l'id_Prot) qui n'appartient pas aux 2 tables, j'affiche le lien $adresseOrg correspondant a l'organisme ($k) a laquel appartient $v mais j'ai du mal.
    Donc a votre avis comment j'affecte la bonne adresseOrg correspondant au bon $v selon son organisme?

    Merci pour tout.

  2. #2
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Rebonjour,

    J'ai essaye ceci avec des compteurs dans la boucle et un unset a la fin de la boucle mais toujours rien:

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     foreach($res as $k=>$a) {
              printf ('<h1>%s</h1>','<center><div style="color:#FF0000;">'.$k.'</center></div>');
              echo '<ul>';  
     
              echo '<h2><center><div style="color:#0000FF;">Known Occurrences:</h2></center></div>';			
     
                     foreach ($a as $v) {
                     //On teste si l'id proteine recupere contient des nouvelles occurrences
                     $testProtC = $db->query(("SELECT *
                                              FROM OCC_NVDC_PAR_DC
                                              WHERE id_Prot= '$v'"));
     
    	         $nbRowC= $testProtC->rowCount();
     
                     //Requete pour recuperer les liens de l'organisme lorsqu'aucune nouvelle occurrence n'a ete trouve
                     $lienOrg = $db->query(("SELECT DISTINCT PROTEINE.organisme,WEB_ORGANISM.adresseWebOrg_debut, WEB_ORGANISM.adresseWebOrg_fin
                                             FROM PROTEINE,WEB_ORGANISM
                                             WHERE PROTEINE.organisme=WEB_ORGANISM.organisme
                                             AND PROTEINE.id_Prot='$v'"));
     
    		 //Si aucune occurrence
                     if  ($nbRowC == 0) 
                      {   
                       $i=0;
                       foreach ($lienOrg as $link)
                           {
                            $nomOrg=$link['organisme'];
                            $adresseOrgDebut=$link['adresseWebOrg_debut'];
                            $adresseOrgFin=$link['adresseWebOrg_fin'];
                            $adresseOrg =$adresseOrgDebut.$v.$adresseOrgFin;
                            printf('<li>%s</li>',"<center><"."<a href=\"$adresseOrg\">$v</a>"."></center>");
                            $i++;
                           }
                           unset ($link);
     
                      }//Sinon on affiche la page html des Nouvelles Occurrences
     
                      else
     
               	     { printf ('<li>%s</li>',"<center><"."<a href=\"http://www.lirmm.fr/~terrapon/coddDB/$v.html\">$v</a>"."></center>"); }
     
     
                     }
     
         }
    Si quelqu'un a une idee pour que le foreach marche a chaque fois avec la bonne valeur, cela serait vraiment sympa. Merci ^^

Discussions similaires

  1. [WD15] Champ table qui n'affiche qu'un seul enregistrement
    Par ykydra dans le forum WinDev
    Réponses: 8
    Dernier message: 02/11/2010, 15h33
  2. RecordSet qui n'affiche qu'une seule ligne
    Par niamo dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/06/2010, 11h17
  3. [JSTL] foreach qui ne fonctionne qu'une seule fois
    Par Ouguiya dans le forum Taglibs
    Réponses: 16
    Dernier message: 02/08/2007, 16h17
  4. echo qui s'affiche tout seul :(
    Par schats dans le forum Langage
    Réponses: 9
    Dernier message: 02/03/2007, 11h31
  5. [Requete] qui n'affiche pas les doublons mais sur un seul champs
    Par joseph.breham dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/12/2006, 14h57

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