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 :

boucle while classer par domaine


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Par défaut boucle while classer par domaine
    je fais afficher des données par domaine exemple tous les entreprises du bâtiments, tous les entreprises dans le domaine informatique, commerce etc..
    avec


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($act=mysql_fetch_assoc($result)){

    je veux essayer de faire afficher par domaine, mais pour chaque entreprise j'ai l'affichage du domaine, faut il que je sort de la boucle while ? mais je n'y arrive pas,

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as plusieurs solutions :

    - artillerie lourde : tu fais une requete qui parcours les domaines et a l'interieur tu fais une deuxieme requete qui parcours les entreprises correspondant au domaine.

    - order : tu fais une requete triée par domaine et a chaque ligne tu regardes si le domaine en cours est different du domaine précedent ; si oui, tu affiches une séparation.

    - tableau trié : tu ranges les resultats de ta requete dans un tableau indexé par domaine $tab[$act['domaine']][] = $act['entreprise'];
    Ensuite tu parcours ce tableau pour faire ton affichage
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Par défaut
    je préfère la première solution , ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT M.numM , S.numM , S.numMet , Met.numAct , Met.nomMet , M.nomS ,A.numAct , A.typeAct 
    FROM membre M, socmet S, metier Met, activite A
    WHERE S.numMet = 2 AND S.numMet=Met.numMet AND S.numM=M.numM AND A.numAct=Met.numAct AND A.numAct IN (Select M.numM , S.numM , S.numMet , Met.numAct ,A.numAct , A.typeAct FROM membre M, socmet S, metier Met, activite A WHERE S.numMet=Met.numMet AND S.numM=M.numM)
    Je trouve normal l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1241 - Operand should contain 1 column(s)
    j'ai essayé de remplacé IN par = , mais la même erreur s'affiche
    j'ai l'impression qui manque quelque chose ou c'est complètement faux

    je résume pour essayer de comprendre :
    j'ai trois tables :
    - metier(numMet,..,#numAct)
    - activite(numact,...)
    - membre(numM,...)
    -(relation entre metier et membre) socmet(#numM,#numMet)

    donc je devrai faire pour la sous requête A.numAct IN (selectionne moi les membres qui ont comme activité A.numAct qui est compris dans metier)
    ce qui donne en sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select M.numM , S.numM , S.numMet , Met.numAct ,A.numAct , A.typeAct FROM membre M, socmet S, metier Met, activite A WHERE S.numMet=Met.numMet AND S.numM=M.numM
    lol j'espère que c'est compréhensif
    PS je préfère qu'on ne donne pas la réponse (ou la requête exacte) mais seulement une explication plus compréhensif lol

  4. #4
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Attention dans une imbrication de requete tu dois avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ=(SELECT autrechamp FROM...
    Donc un seul champ dans le select imbriqué: n'oublie pas tu fais des comparaison, il est donc logique de comparer une champ avec un autre à la fois.

  5. #5
    Membre éclairé Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Par défaut
    j'ai fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND A.numAct = (Select numAct FROM activite)
    et j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1242 - Subquery returns more than 1 row
    RE edit : j'ai changé le = par IN , est c'est ok ,

    maintant ce que je voudrais c'est de ne pas afficher pour chaque membre l'activité, juste dans <td> l'activité puis la liste des membres appartenant à cet activé donc dans ma boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($act=mysql_fetch_assoc($result)){
    dois ajouter une autre condition ?

  6. #6
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Ben tu peux faire un ORDER BY suivant l'activité et après tu fera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $JeuEnr=mysql_fetch_assoc($result);
    $activite=$JeuEnr['tonChampActivite'];
    While($JeuEnr){
     
        if ($activite==$JeuEnr['tonChampActivite']){
                 //j'affiche le membre concernant l'activité
                 echo $JeuEnr['tonChampMembre'];
          }
       else{
                //j'affiche la nouvelle activité:
               echo $JeuEnr['tonChampActivite'];
       }
    $JeuEnr=mysql_fetch_assoc($result);
    }

  7. #7
    Membre éclairé Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Par défaut
    j'ai essayé sa ma fait une boucle infini,
    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
     
    $act=mysql_fetch_assoc($result);
    				$domaine = $act['typeAct'];
    					echo "<fieldset>";
    					echo "	<legend>".ucfirst($domaine)."</legend>";
     
    							$NbrCol = 2;
    							$NbreData = mysql_num_rows($result);
    							$NbrLigne = 0;
    							if ($NbreData != 0) {
    							   $j = 1;
    							   echo '<table width=\"900px\" align="left">';
     
    								  if ($j%$NbrCol == 1) {
    									 $NbrLigne++;
    									 echo "<tr>";
    									 $fintr = 0;
    								  }
    								  echo '<td>';
    								  echo $act['nomMet']." ".$act['nomS']."<br>";
    								  echo '</td>';
    								  if ($j%$NbrCol == 0) {
    									 echo "</tr>"; 
    									 $fintr = 1;
    								  }
    								  $j++;
     
    							   if ($fintr!=1) { echo '</tr>'; }
    							   echo '</table>';
    								} else {
    								   echo 'Il n\'y a pas de membre dans ce domaine';
    								}
     
     
    				echo "</fieldset>";
    					}
    					}
    					} 
    					}
    				$valch="";
    ucfirst($domaine) ne doit pas se répéter, chaque fieldset est un domaine différent avec les membres concernant pour chaque domaine,
    si je mets ucfirst($domaine) en dehors de la boucle while je n'aurais pas les autres domaines... j'ai la tête embrouillé

Discussions similaires

  1. Problème thread attente par boucle while
    Par chlamy dans le forum Android
    Réponses: 4
    Dernier message: 24/08/2014, 02h16
  2. Réponses: 1
    Dernier message: 19/04/2014, 20h45
  3. Boucle while rompue par plink?
    Par Matteo37 dans le forum Administration système
    Réponses: 11
    Dernier message: 09/03/2012, 19h15
  4. Incrémenter un Array par une boucle While
    Par Misoss dans le forum Langage
    Réponses: 3
    Dernier message: 09/08/2010, 21h38
  5. chargement du Combo Par sql boucle While wend
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/06/2008, 18h16

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