Probleme avec boucle while
Bonjour,
J'ai une bdd composée de 2 tables, 1 société et 1 contact. Je voudrais afficher toutes les sociétés, avec leurs contacts respectifs. Si je fais une boucle while ça affiche tous les contacts et leurs sociétés, si il y a plusieurs contact d'une même société alors la société se répète. C'est pas grave mais c'est pas optimal.
Ce que je eux c'est avoir une société qui s'affiche et ses contacts en dessous ; j'avais pensé faire une 1ere boucle while listant les société, et dans cette boucle en intégrer une autre qui elle listait les contacts par societe.
Malheureusement ça ne marche pas, ce ne doit pas être trop conçu pour ou il me manque un truc
Y a t il une technique ou des pistes pour ce genre de chose ?
------------
Les exemples : boucle while me donne
societe1 = contact1société1
société1 = contact2société1
société2 = contact3société2
etc.
Ce que je veux :
société1 = contact1societe1, contact2societe1
société2 = contact3société2
etc.
Ce que tu peux faire, c'est au fur et à mesure que tu affiches tes contacts, tu testes si oui ou non tu as déjà affiché la société de ce contact.
Pour cela, tu peux employer un tableau.
Quand tu affiches un contact, tu testes si la société est ou non dans ce tableau.
Si elle y est, alors, cela veut dire que tu as déjà afficher le nom de cette société.
Si elle n'y est pas, c'est que tu n'as pas déjà affiché cette société, donc tu l'affiches et tu rentres le nom de cette société dans ce tableau.
Naturellement, c'est valable uniquement si tu tries tes contacts d'abord par leur nom de société (au niveau SQL).
J'ai vais essayer d'imbriquer IF dans un While, j'ai un doute sur la sortie de la condition, je me demande si ça va pas bugger... C'est pas très clair les structures de controles, les exemples vu sur le net sont pour beaucoup des chiffres mais peu de concret !
Merci !
Pas réussi avec if, ça m'affiche tous les contacts d'un coup :-(
Je vais assayer GROUP BY pour voir
Tu peux t'inspirer de ça :
<?php
$db = new mysqli(...) ;
$sql =
'select c.nom as nom
, c.prenom as prenom
, s.nom as societe
from contacts as c
join societes as s
on c.societe_id = s.id
order by societe, nom, prenom
' ;
$contacts = array() ;
$res = $db->query($sql) ;
if($res instanceof mysqli_result)
{
while($row = $res->fetch_assoc())
$contacts[] = $row ;
}
else
{
/* erreur à traiter */
}
$societe = null ;
echo "<table>\n" ;
foreach($contacts as $idx => $contact)
{
if($societe !== $contact['societe'])
{
echo "<tr>\n" ;
$societe = $contact['societe'] ;
echo "\t\t<td colspan='3'>".htmlentities($societe)."</td>" ;
echo "\t</tr>\n" ;
}
else
{
echo "<tr>\n" ;
$nom = $contact['nom'] ;
$prenom = $contact['prenom'] ;
$tel = $contact['tel'] ;
echo "\t\t<td >".htmlentities($societe)."</td>\n" ;
echo "\t\t<td >".htmlentities($nom)."</td>\n" ;
echo "\t\t<td >".htmlentities($prenom)."</td>\n" ;
echo "\t</tr>\n" ;
}
}
echo "</table>\n" ;
Ce n'est pas testé, donc certainement des erreurs de syntaxe traînent par-ci par-là. Mais l'idée est là. N'hésites pas à poser des questions.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Merci pour le temps que tu as pris pour mon problème, je vais la tester mais sincèrement je n'ai pas le niveau pour tout comprendre, à désosser ça va être ardu. Entretemps j'ai récupérer ce type de requète :
SELECT societe_id, societe_nom,
GROUP_CONCAT(contact_nom, ' ', contact_prenom, ', ' ORDER BY contact_nom SEPARATOR '\n') AS contact
FROM contact
INNER JOIN societe ON contact_societe = societe_nom
GROUP BY societe_id, societe_nom;
ça fonctionne bien sur ma console SQL, j'ai bien les résultats sous la forme :
societeA = contactX, contactY
societeB = contactZ
...il me faut maintenant afficher le résultat en php...
Ben le code que je t'ai proposé est très simple. Donc si tu ne comprends pas, pose des questions. Quand à la requête que tu as trouvé, c'est vrai qu'elle peut être sympa. pour l'exploiter il faut que tu utilises
explode pour casser le résultat.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Impossible de dépatouiller explode, j'ai trouvé autre chose avec mysql_fetch_assoc dans un while
ça fonctionne au poil.
Je refais mon bazar et je regarde le code que tu m'as écrit plus haut
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: