Afficher valeurs de tables

Résolu
Xini28 Messages postés 40 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 9 août 2008 - 30 oct. 2005 à 01:34
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 - 30 oct. 2005 à 21:26
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

monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
30 oct. 2005 à 07:39
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
3
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
30 oct. 2005 à 07:43
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 :)
3
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
30 oct. 2005 à 16:16
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
3
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 10:20
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>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
30 oct. 2005 à 10:47
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
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 10:50
attends...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 10:51
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>
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
30 oct. 2005 à 11:01
Bon on a dérivé ici mais on revien là :]
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 11:03
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>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 11:04
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>
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
30 oct. 2005 à 11:19
v__v donc ma solution est valable :)
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 11:22
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>
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
30 oct. 2005 à 11:24
Sauf si tu veux afficher les noms de ceux qui sont dans aucune sections...
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 11:27
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>
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
30 oct. 2005 à 11:31
mouahahah pas bête :) une section "non affectée"
0
Xini28 Messages postés 40 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 9 août 2008
30 oct. 2005 à 11:56
Merci à vous, je vais faire le test dès que je peux. Mais ça à l'air bon en effet.
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
30 oct. 2005 à 12:20
O_O t'es entré dans la voie.... de l'acceptation on dirait o_o
0
Xini28 Messages postés 40 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 9 août 2008
30 oct. 2005 à 14:47
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?
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 oct. 2005 à 14:54
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>
0
Xini28 Messages postés 40 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 9 août 2008
30 oct. 2005 à 14:57
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.
0
Rejoignez-nous