Probleme avec boucle while

Répondre
SuperTalon
le 28/03/2009 à 13:38
SuperTalon
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.
LA GLOBULE
le 30/03/2009 à 09:07
LA GLOBULE
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).
SuperTalon
le 30/03/2009 à 20:48
SuperTalon
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 !
SuperTalon
le 31/03/2009 à 17:48
SuperTalon
Pas réussi avec if, ça m'affiche tous les contacts d'un coup :-(

Je vais assayer GROUP BY pour voir
LupusMic
le 31/03/2009 à 21:11
LupusMic
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.
SuperTalon
le 01/04/2009 à 09:17
SuperTalon
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...
LupusMic
le 01/04/2009 à 21:59
LupusMic
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.
SuperTalon
le 06/04/2009 à 16:35
SuperTalon
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
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours