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 :

left outer join et concaténation dans un tableau passe par if mais pas par else ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut left outer join et concaténation dans un tableau passe par if mais pas par else ?
    Bonjour,

    j'ai un rhume de cerveau qui m'empêche de voir clair pour faire un truc en php ...

    Bon je recupère des enregistrements avec un left outer join

    en gros


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Id        nom       fonction       departement
    1         truc       ATC             27
    1         truc       ATC             34
    1         truc       ATC             54
    2         machin   ATC              01
    2         machin   ATC              10
    2         machin   ATC              75
    2         machin   ATC              92

    le but est d'afficher un tableau recap avec une seul ligne par id et de regrouper dans une seule cellule de tableau la liste des départements d'un commercial.
    J'utilisais GROUP_CONCAT qui marchait au poil jusqu'à ce que je découvre que la version distante de mysql ne le supporte pas ...

    en gros le code actuel de la boucle sur le result est:
    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
    <tr onmouseover="this.style.backgroundColor='salmon';" onmouseout="this.style.backgroundColor='transparent';">
    	<?php 	echo '<td id="ID_'.$row['Idcomm'].'"><form action="FicheUser.php" method="post"><input name="UserId" value="'.$row['Idcomm'].'" type="hidden" /><input name="ButtonUserId"  type="image" src="AdminPics/Modif.gif" style="cursor:pointer;" /></form></td>';
    			echo '<td id="ID_'.$row['Idcomm'].'">'.$row['Nom'].'</td>';
    			echo '<td >'.$row['Fonction'].'</td>';
    			echo '<td>'.$row['Titre'].'</td>';
    			echo '<td>'.$row['Agence'].'</td>';
    			echo '<td>'.$row['Adresse'].'</td>'; 			
    			echo '<td>'.$row['Sedentaire'].'</td>'; ?>
    			echo '<td>'.$row['Depts'].'</td>';	
     
    			echo '<td>'.$row['Tel'].'</td>';	
    			echo '<td>'.$row['Mob'].'</td>';	
    			echo '<td>'.$row['Fax'].'</td>';	
    			echo '<td>'.$row['Email'].'</td>';	
    			echo '<td>'.(($_SESSION['userType']=="MAS" or $_SESSION['userType']=="ADM")?$row['Password']:$_SESSION['userType']).'</td>';	
    			echo '<td>'.$row['Nom'].'</td>';
    			?>
    </tr>
    je ne vois vraiment pas comment faire une boucle qui permette de n'incrémenter que le contenu de la cellule departement tant que l'id ne vraie pas ???
    Ou alors il faut le faire avant et créer un array temporaire avant de basculer l'echo ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Bon il semblerait que je sois obligé de passer par un array avant l'affichage

    je me suis donc lancé là dedans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    $TabComm=array();
    $TempComm="";
    while($row = mysql_fetch_assoc($sqlResult)) { 
    if($TempComm!=$row['Idcomm']){	$TempComm=$row['Idcomm'];
    								$TabComm[$row['Idcomm']]=array("id" =>$row['Idcomm'],"nom"=>$row['Nom'],"fonction"=>$row['Fonction'],"agence"=>$row['Agence'],"adresse"=>$row['Adresse'],"sedentaire"=>$row['Sedentaire'],"depts"=>$row['Depts'],"tel"=>$row['Tel'],"mob"=>$row['Mob'],"fax"=>$row['Fax'],"mail"=>$row['Email']) ;}
    else {$TabComm[$row['Idcomm']]['depts'].=",".$row['Depts'];}
    }
    var_dump($TabComm);
    ?>
    mais je n'ai qu'un département ???
    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
     
     
     
    array(27) {
     [2]=>  array(11) { 
    					["id"]=>  string(1) "2" 
    					["nom"]=>  string(9) "truc" 
    					["fonction"]=>  string(3) "COM" 
    					["agence"]=>  string(5) "Paris" 
    					["adresse"]=>  string(0) "" 
    					["sedentaire"]=>  string(10) "bidule" 
    					["depts"]=>  string(2) "75" 
    					["tel"]=>  string(14) "" 
    					["mob"]=>  string(14) "" 
    					["fax"]=>  string(14) "" 
    					["mail"]=>  string(20) "" } 
     
    [3]=>  array(11) { ["id"]=>  string(1) "3" 
    					["nom"]=>  string(12) "machin" 
    					["fonction"]=>  string(3) "COM" 
    					["agence"]=>  string(4) "Lyon" 
    					["adresse"]=>  string(0) "" 
    					["sedentaire"]=>  string(8) "bidule" 
    					["depts"]=>  string(2) "74" 
    					["tel"]=>  string(14) "" 
    					["mob"]=>  string(14) "" 
    					["fax"]=>  string(14) "" 
    					["mail"]=>  string(23) "" }
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    J'obtiens exactement le meêm résultat avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php 
    $TabComm=array();
    $TempComm=-1;
    $currentIndex=-1;
    while($row = mysql_fetch_assoc($sqlResult)) { 
    if($TempComm!=$row['Idcomm']){	$TempComm=$row['Idcomm'];
    								$currentIndex++;
    								array_push($TabComm,array("id" =>$row['Idcomm'],"nom"=>$row['Nom'],"fonction"=>$row['Fonction'],"agence"=>$row['Agence'],"adresse"=>$row['Adresse'],"sedentaire"=>$row['Sedentaire'],"depts"=>$row['Depts'],"tel"=>$row['Tel'],"mob"=>$row['Mob'],"fax"=>$row['Fax'],"mail"=>$row['Email'])) ;}
    else {$TabComm[$currentIndex]["depts"]=$TabComm[$TempComm]["depts"].",".$row['Depts'];}
    }
     
    var_dump($TabComm);
    ?>
    Je pensais qu'il pouvait y avoir un souci avec l'idComm pris comem string ou integer ... mais il semblerait que non

    Il ne concatène pas le departement ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $TabComm=array();
    $TempComm=-1;
    $currentIndex=-1;
    while($row = mysql_fetch_assoc($sqlResult)) {
    if($TempComm!=$row['Idcomm']){	$TempComm=$row['Idcomm'];
    								echo  $TempComm. "  ".$row['Idcomm']."<br />";}
    else {echo  $TempComm. "  ".$row['Idcomm']."<br />";}

    il ne rentre jamais dans le else ???

    ce que je trouve d'autant plus curieux c'est qu'en inversant les conditions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $TabComm=array();
    $TempComm=-1;
    $currentIndex=-1;
    while($row = mysql_fetch_assoc($sqlResult)) {
    if($TempComm==$row['Idcomm']){	 $TabComm[$currentIndex]["depts"]=$TabComm[$currentIndex]["depts"].",".$row['Depts'];}
    else {	$TempComm=$row['Idcomm'];
    		$currentIndex++;
    		array_push($TabComm,array("id" =>$row['Idcomm'],"nom"=>$row['Nom'],"fonction"=>$row['Fonction'],"agence"=>$row['Agence'],"adresse"=>$row['Adresse'],"sedentaire"=>$row['Sedentaire'],"depts"=>$row['Depts'],"tel"=>$row['Tel'],"mob"=>$row['Mob'],"fax"=>$row['Fax'],"mail"=>$row['Email'])) ;}
            }
    var_dump($TabComm);
    j'obtiens exactement le même resultat ???? il ne passe pas pas le if et ne concatène pas ????
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Vous n'auriez pas pu me dire que ma reqûete contenait un GROUP BY ... !!!!
    ça m'aurait évité de chercher deux jours pour rien ...

    Ha ben non je vous ai pas montré la requete !!!
    en fait avec le GROUP BY sur l'id la requete ne me retournait qu'un id ...


    Sinon j'ai une petite annonce à passer ....

    Grenouille spaciale cherche trou isolé, petit coin ou caverne discète à l'abri des regards pour aller se cacher de honte ...

    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    un énorme no comment
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Alors paracétamol aspirine ou iburpofène ...
    pic et pic et collégramme ...



    bon pour me rattrapper ... aux branches ...
    voici ma solution pour émuler le GROUP_CONCAT donc:

    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
    $TabComm=array();
    $TempComm=-1;
    while($row = mysql_fetch_assoc($sqlResult)) {
    if($TempComm!=$row['Idcomm']){$TempComm=$row['Idcomm'];
    		$TabComm[$TempComm]=array("id" =>$row['Idcomm'],"nom"=>$row['Nom'],"fonction"=>$row['Fonction'],"titre"=>$row['Titre'],"agence"=>$row['Agence'],"adresse"=>$row['Adresse'],"sedentaire"=>$row['Sedentaire'],"depts"=>$row['Depts'],"tel"=>$row['Tel'],"mob"=>$row['Mob'],"fax"=>$row['Fax'],"mail"=>$row['Email'],"pass"=>$row['Password']) ;}
    else {	 $TabComm[$TempComm]["depts"].=','.$row['Depts'];	}
            }
    foreach ($TabComm as $EnregComm => $ArrayComm) {
    					?>
    <tr onmouseover="this.style.backgroundColor='salmon';" onmouseout="this.style.backgroundColor='transparent';">
    	<?php 	echo '<td id="ID_'.$ArrayComm['id'].'"><form action="FicheUser.php" method="post"><input name="UserId" value="'.$ArrayComm['id'].'" type="hidden" /><input name="ButtonUserId"  type="image" src="AdminPics/Modif.gif" style="cursor:pointer;" /></form></td>';
    			echo '<td id="ID_'.$ArrayComm['id'].'">'.$ArrayComm['nom'].'</td>';
    			echo '<td >'.$ArrayComm['fonction'].'</td>';
    			echo '<td>'.$ArrayComm['titre'].'</td>';
    			echo '<td>'.$ArrayComm['agence'].'</td>';
    			echo '<td>'.$ArrayComm['adresse'].'</td>'; 			
    			echo '<td>'.$ArrayComm['sedentaire'].'</td>'; 
    			echo '<td>'.$ArrayComm['depts'].'</td>';	
    			echo '<td>'.$ArrayComm['tel'].'</td>';	
    			echo '<td>'.$ArrayComm['mob'].'</td>';	
    			echo '<td>'.$ArrayComm['fax'].'</td>';	
    			echo '<td>'.$ArrayComm['mail'].'</td>';	
    			echo '<td>'.(($_SESSION['userType']=="MAS" or $_SESSION['userType']=="ADM")?$ArrayComm['pass']:$_SESSION['userType']).'</td>';	
    			echo '<td>'.$ArrayComm['nom'].'</td>';
    			?>
    </tr>
    <?php
     } ?>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

Discussions similaires

  1. Positionnement prédicat dans un LEFT OUTER JOIN
    Par rad_hass dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/06/2010, 16h30
  2. Problème dans left outer join
    Par aymen007 dans le forum SQL
    Réponses: 1
    Dernier message: 21/05/2008, 12h03
  3. Problème avec left outer join
    Par jgfa9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2005, 21h07
  4. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 13h17
  5. concatenation de chaine dans un left outer join
    Par the_edge dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/11/2004, 16h08

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