Afficher valeurs de tables [Résolu]

Signaler
Messages postés
40
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
9 août 2008
-
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
-
Salut à tous.
J'ai un petit problème sur l'affichage en fonction de deux tables. Ces tables sont en relation avec une autre table pour les lier. J'ai la table contact avec tous mes contacts, ensuite la table section avec toutes mes sections. Après j'ai la table gérer qui permet de relier mes deux tables précédentes. En fait, je voudrais afficher pour un contact, toutes les sections auquel il appartient. J'arrive à afficher les contacts avec les sections, mais les contacts sont marqués en plusieurs exemplaires en fonction du nombre de sections auquel il appartient. Hors je voudrais afficher une fois le contact, suivi de ses sections. Besoin d'un coup de main. Merci d'avance.

31 réponses

Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Tu as deux choix me semble-t-il :

1/

<?php

$query = "SELECT contact.nom, section.nom FROM contact,section,gerer
WHERE contact.id=gerer.id_contact AND section.id=gerer.id_section ORDER
BY contact.nom ASC";

$result = mysql_query($query,$id_con);

?>



// Ce qui te donne un tableau associant les nom de tes contacts et leurs sections.

// Mais, les contacts qui ne sont dans aucune section ne serons jamais affichés.

// De même que les sections qui n'ont aucuns contacts.



2/

<?php

$query = "SELECT contact.id, contact.nom, gerer.id_section ";

$query.= "FROM contact ";

$query.= "LEFT JOIN gerer ";

$query."ON contact.id gerer.id_contact";

$query.= "ORDER BY contact.nom ASC";

$result = mysql_query($query,$id_con);


?>



Cette requête crée un tableau associant chaque contact avec une section à laquelle il appartient.

Donc si un utilisateur est dans plusieurs section, il sera évidemment inscrit plusieurs fois.

Alors que si un utilisateur n'est dans aucune des sections, il sera associé à la valeur NULL



Quoiqu'il en soit, pour éviter d'afficher deux fois le même noms, il te suffit de faire :

<?php

$list = array();


while ($data = mysql_fetch_array($result))


{


$list[$data['contact.nom']][] = $data['section.nom'] ;


}

?>



Et de traiter le tableau résultant

Ou alors


<?php

$controle = '';

$list = '';

while ($data = mysql_fetch_array($result))



{



if($controle !== $data['contact.nom'])

{

$list .($controle '') ? '' : '</li>' ;

$list .= '<li>'.$data['contact.nom'] ;

$list .= '';

$controle = $data['contact.nom']
; // De cette façon, ce bloc IF ne s'executera qu'au
prochain changement de contact.nom

}

$list.= '<li>'.$data['section.nom'].'</li>' ;

}

$list.='';

?>



Et d'afficher la variable $list
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Ah j'ai oublié de dire que pour le 2° choix il faudra créer une boucle pour retrouver le nom de la section pour chaque gerer.id_section. C'est ce qui fait que c'est un choix plus lourd!

Donc les boucles while que j'ai présentées ne sont valables que pour le premier choix. Mais le principe est le même :)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Ce que je ne comprend pas, c'est pourquoi faire une 3ème table qui relis 2 tables ?



Avec une seule table, je peux faire la même chose !



| ID | Prénom | Classe |

| 1 | Moi | CE1 |

| 2 | Toi | CP |





<?php

$sql = "SELECT prenom, class FROM base";

$query = mysql_query($sql);

while ($data = mysql_fetch_array($query) ) {

// echo $data['prenom'];

// echo $data['class'];

}

?>

Et j'arrive à la même chose sans faire de sous-requète :o
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



plutôt que de faire des boucles inutiles pour savoir si y'a un nom
identique, utilise la clause DISTINCT dans la requête MySQL :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

requête SQL:

SELECT contact.nom, section.nom
FROM contact, section, gerer
WHERE contact.id = gerer.id_contact
AND section.id = gerer.id_section
ORDER BY contact.nom ASC
LIMIT 0 , 30,

----
[Modifier] [Expliquer SQL] [Créer source PHP] [Actualiser]




|----
nom |

nom |

<!-- Results table body -->

----

luc,
CE1,

----

luc,
CE2,

----

luc,
CM1,

----

nicolas,
CM1,

----

paul,
CM1,

----

paul,
CM2,

----

robert,
CE2,

----

robert,
CM2



<hr size ="2" width= "100%">



requête SQL:

SELECT DISTINCT contact.nom, section.nom
FROM contact, section, gerer
WHERE contact.id = gerer.id_contact
AND section.id = gerer.id_section
ORDER BY contact.nom ASC
LIMIT 0 , 30,

----
[Modifier] [Expliquer SQL] [Créer source PHP] [Actualiser]




|

----

nom |

nom |

<!-- Results table body -->

----

luc,
CE1,

----

luc,
CE2,

----

luc,
CM1,

----

nicolas,
CM1,

----

paul,
CM1,

----

paul,
CM2,

----

robert,
CE2,

----

robert,
CM2



<hr size ="2" width="100%">

Ou est la différence? o.o
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
attends...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
exporte la table que t'as crée stp monoceros :-) (ça m'évitera de la refaire)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Bon on a dérivé ici mais on revien là :]
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
RAAAAAAHHHHH ok... (j'avais pas lu le problème en fait)



je ne connais pas d'autre moyen que de parser tous les résultats (aie)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
je croyais qu'il te fallait un seul nom...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

v__v donc ma solution est valable :)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
exact :-)



la première solution est la meilleure :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Sauf si tu veux afficher les noms de ceux qui sont dans aucune sections...
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Bah dans ce cas là tu les fous dans une section ^^

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

mouahahah pas bête :) une section "non affectée"
Messages postés
40
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
9 août 2008

Merci à vous, je vais faire le test dès que je peux. Mais ça à l'air bon en effet.
Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

O_O t'es entré dans la voie.... de l'acceptation on dirait o_o
Messages postés
40
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
9 août 2008

J'utilise ce code :
$result mysql_query('SELECT contact.num_contact, contact.pseudo_contact, gérer.num_section FROM contact LEFT JOIN gérer ON contact.num_contact gérer.num_contact ORDER BY contact.nom ASC');
$controle = '';
$list = '';
while ($data = mysql_fetch_array($result))
{
if($controle !== $data['contact.pseudo_contact'])
{ $list .($controle '') ? '' : '</li>' ;
$list .= '<li>'.$data['contact.pseudo_contact'] ;
$list .= '';
$controle = $data['contact.pseudo_contact'] ; // De cette façon, ce bloc IF ne s'executera qu'au prochain changement de contact.nom
}
$list.= '<li>'.$data['section.nom_section'].'</li>' ;
}
$list.='';

Cependant, je n'arrives pas à faire fonctionner. Cela m'affiche le message d'erreur :
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in d:\www\stargate-web.com\htdocs\connexionbis.php on line 16
De quoi cela pourrait venir?
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
ta requête n'est pas bonne, il y a soit une erreur dans le nom des champs, soit une autre erreur, mais dans la requête :-)



"gérer" => gerer ?

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
40
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
9 août 2008

J'ai réussi à afficher. En effet, il y avait une erreur. Cependant, cela m'affiche




<LI>
<LI>
<LI>
<LI>
<LI>
<LI>
<LI>
<LI>
<LI>
<LI>
<LI></LI>
C'est tout ce que ça m'affiche. Je ne comprends pas. Je voudrais arriver à afficher une fois le contact suivi de ses sections.