tontoclic
Messages postés3Date d'inscriptionsamedi 1 mars 2003StatutMembreDernière intervention29 mars 2008
-
28 mars 2008 à 18:00
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 2010
-
29 mars 2008 à 13:23
Bonjour,
Je développe un site en PHP-MySQL pour site de numérisation et SIG (Systèmes d'Information Géographiques)
J'ai un pb d'affichage des données dans plusieurs tables dont voici les structures :
Liste de la structure des tables
PRESTATION (id_prestation, nom_prestation); -> 2 choix possibles : En numérisation et En SIG
DEPARTEMENT (id_dep, nom_dep);
REFERENCE (id_ref, client_ref, nom_ref, ville_ref, logo_ref, site_ref, id_dep, id_prestation);
Ce que je veux faire :
Afficher toutes les références par prestations et par départements :
En gros ça doit me donner ceci :
En numérisation
Haute-Loire (43)
liste de toutes les références de la prestation numérisation du département de la Haute-Loire (43)
En SIG
Cantal (15)
liste de toutes références de la prestation SIG du département du Cantal (15)
....
Ma logique est la suivante : Compter le nombre de lignes dans les tables DEPARTEMENT et PRESTATION puis parcourir ces deux tables pour en extraire les bonnes références par rapport au bon type de prestation et au bon département.
Le pb c que je ne sais pas mon code buggue au niveau des boucles for ou de mes boucles while imbriquées ou encore dans mes requêtes.
J'ai du mal dans la logique des boucles imbriquées for et while en PHP, voici mon code:
//En-tetes
Clients,
Types de prestations,
Action 1,
Action 2,
----
<?
$parcours_dep = "SELECT COUNT(id_dep) as nbdep FROM departement";
$res_dep = mysql_query($parcours_dep);
$i = 1;
$j = 1;
for ($i=1; $i<$res_dep; $i++)
{
$sql = "SELECT * FROM reference as REF, departement as DEP, prestation as P WHERE REF.id_dep DEP.id_dep AND REF.id_prestation P.id_prestation
AND DEP.id_dep = '".$i."'
GROUP BY P.nom_prestation, DEP.nom_dep, REF.id_ref ";
$parcours_prest = "SELECT COUNT(id_prestation) as nbprest FROM prestation";
$res_prest = mysql_query($parcours_prest);
for ($j=1; $j<$res_prest; $j++)
{
$sql2 = "SELECT * FROM reference as REF, departement as DEP, prestation as P WHERE REF.id_dep DEP.id_dep AND REF.id_prestation P.id_prestation
AND P.id_prestation = '".$j."'
GROUP BY P.nom_prestation, DEP.nom_dep, REF.id_ref ";
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 28 mars 2008 à 22:36
Salut,
$res_dep = mysql_query($parcours_dep);
La fonction mysql_query() retourne un ressource 'mysql result', exploitable par les fonctions qui extraient les résultats des ressources : mysql_fetch_*() et mysql_result(). Il FAUT obligatoirement utiliser l'une de ces fonctions pour connaitre les valeurs retournées par la requête.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 29 mars 2008 à 09:58
Hello,
si j'ai bien compris ce que tu voulais faire, ton problème n'est pas un problème de boucles, mais de requête.
Non testé, mais cherche plutôt à faire ça en une seule requête comme ça :
SELECT
presta.nom_prestation, dep.nom_dep, ref.client_ref
FROM
reference ref
INNER JOIN prestation presta ON presta.id_prestation = ref.id_prestation
INNER JOIN departement dep ON dep.id_dep = ref.id_dep
ORDER BY
presta.nom_prestation, dep.nom_dep, ref.client_ref
tontoclic
Messages postés3Date d'inscriptionsamedi 1 mars 2003StatutMembreDernière intervention29 mars 2008 29 mars 2008 à 13:16
Ta requête marche bien mais ça me répète les prestations et nom de départements entre chaque référence :
Ex :
En numérisation Allier (03)
Liste des références de la prest num et du dep allier
En numérisation Haute-Loire (43)
.....
En numérisation Haute-Loire (43)
....
Je ve que la prestation et le département s'affiche qu'une seule fois
comme ceci :
En numérisation Haute-Loire (43)
->Liste des références
En numérisation Allier (03)
->Liste des références
En SIG Puy-deDome
->Liste des références
.......
Pouvez-vous m'aider sur ce point! Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 29 mars 2008 à 13:23
Ah ça après, c'est à toi de contrôler ce que tu affiches. Tu ne peux pas le faire en sql.
$sNomPresta = '';
while (parcours requête)
if ($sNomPresta === resultatParcoursRequêteDeNomDep) alors ne pas répêter le département mais afficher les prestations