shadow1779
Messages postés706Date d'inscriptionmercredi 17 novembre 2004StatutMembreDernière intervention29 septembre 2013
-
12 juin 2007 à 21:22
cs_sebastien_et_typh
Messages postés289Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention11 juin 2010
-
15 juin 2007 à 10:17
Bonsoir,
j'aimerai m'améliorer en PHP/MySQL en commencant avec les jointures, j'aimerai pour sa être un peu guidé car malgré les tutos j'ai du mal: voici la question d'origine que j'ai pu avoir, typique d'un test d'embauche en tant que développeur php:
- Afficher les clients (avec leur commercial) par région - voir exemple ci contre
pour cela on a le shéma suivant:
table: clients
- id (integer)
- civilite enum('Mme','M','Mlle')
- nom (varchar)
- prenom (varchar)
- commercial_id: (integer)
table: regions
- id (integer)
- libelle (varchar)
Voila tout, si vous pourriez me faire un exemple, je demande pas la soluce mais la manière de traiter vraiment les données par jointures avec 3 tables, sachant que commercial_id id de la table commerciaux et que region_id id de la table regions
cs_sebastien_et_typh
Messages postés289Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention11 juin 20103 12 juin 2007 à 22:05
donc tu fais :
$query="select clients.nom,clients.prenom,commerciaux.nom,commerciaux.prenom,regions.libelle from clients, commerciaux, regions where clients.commercial_id=commerciaux.id and commerciaux.region_id=regions.id";
$result=mysql_query($query);
$row=mysql_fetch_array($result);
cs_sebastien_et_typh
Messages postés289Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention11 juin 20103 14 juin 2007 à 13:14
si tu a utiliser la meme requete que sur le lien donner tu a essayer de mettre $region = $data['libelle'] au lieu de $region = $data['regions']['libelle']
ce n'est qu'une idee
shadow1779
Messages postés706Date d'inscriptionmercredi 17 novembre 2004StatutMembreDernière intervention29 septembre 2013 14 juin 2007 à 16:10
ouai mais certains champs on les mêmes noms, exemple:
-id est dans commerciaux, mais aussi dans clients et dans région, ce n'est pas le même mais c'est toujours un id, donc il ne saurra pas comment le traiter :s
cs_sebastien_et_typh
Messages postés289Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention11 juin 20103 14 juin 2007 à 16:46
$result=mysql_query("select clients.nom as 'nomClient',clients.prenom as 'prenomClient',commerciaux.nom as 'commercialNom',commerciaux.prenom as 'commercialPrenom'
,regions.libelle as 'Region' from clients, commerciaux, regions where clients.commercial_id=commerciaux.id and commerciaux.region_id=regions.id");
while ($data=mysql_fetch_array($result)){
echo $data['Region'];
echo $row['clientNom']. $row['clientPrenom']." :: (".$row['commercialNom'].$row['commercialPrenom'].")
";
}
je pense quand mettant ce code ca devrait fonctionner et si tu ve rajouter les id tu dois les renomee avec as dans la requete pour pouvoir les distingue
cs_sebastien_et_typh
Messages postés289Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention11 juin 20103 14 juin 2007 à 17:49
Je viens de tester avec la meme structure de base que tu a donner dans ton premier post j'ai mis un client bidon un commercial bidon et une region et avec ce code ca me retourne bien le resultat que tu souhaite :
$req = mysql_query('SELECT clients.nom as "nom_client",clients.prenom as "prenom_client",commerciaux.nom as "nom_commercial",commerciaux.prenom as "prenom_commercial",libelle as "region" from clients,commerciaux,regions where clients.commercial_id=commerciaux.id and commerciaux.region_id=regions.id');
while($data = mysql_fetch_array($req)){
echo $data['region']."
";
echo $data['nom_client']." ".$data['prenom_client']." :: ".$data['nom_commercial']." ".$data['prenom_commercial'];
echo "
";
}
j'espere que ca va fonctionner
shadow1779
Messages postés706Date d'inscriptionmercredi 17 novembre 2004StatutMembreDernière intervention29 septembre 2013 14 juin 2007 à 22:51
Ok, on avance, MAIS encore un tout petit problême de formatage, ca me met ce que tu peux voir juste au dessous, sauf que le but serrait d'afficher par région, en gros toutes les donées de la même régions sont ensemble, les rhones alpes dans rhone alpes, les auvergne dans auvergne ... au lieu de remettre plusieurs fois la région:
Rhône-Alpes
Vito Paul :: Vincent Mickael
cs_sebastien_et_typh
Messages postés289Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention11 juin 20103 15 juin 2007 à 00:35
tu peux utiliser deux requete differente une premier pour selectionner toutes les region et lorsque tu parcour ce resultat tu recherche tous les commerciaux et les client car je ne sai pas en une seule requete c possible
cs_sebastien_et_typh
Messages postés289Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention11 juin 20103 15 juin 2007 à 08:40
ou alor tu peux faire un order by dans ta requete et verifier a chaque debut de boucle si la region et la meme si ce n'est pas la meme tu la reecrit sinon tu continus d'ecrir les client et commerciaux
voila j'esper avoir pu t'aider
shadow1779
Messages postés706Date d'inscriptionmercredi 17 novembre 2004StatutMembreDernière intervention29 septembre 2013 15 juin 2007 à 09:12
ok la normal ca marche, j'aurrai préféré une jointure des 3 tables mais tant pis, sinon au fait pourrai tu me montrer (si tu sais biensur) comment on fait un foreach, j'crois que ca doit etre possible plutot qu'un while, en asp.net on s'en sert pas mal, des truc du genre
foreach(client in clients)
{
// La requete qui lie commerciaux et les clients, ca eviterai de faire un while dans un while
}