par
sadeq » 21 juin 2006, 10:30
Tu veux :
... un script qui permet d'afficher un secteur d'activité une seule fois et d'afficher le nombre d'offres d'emploi qui correspond à ce secteur d'activité....
D'abord, c'est normal qu'il t'affiche le même nombre car tu comptes toutes les offres de tous les secteurs.
En plus et même si tu ne comptais que les offres par secteur ton affichage actuel fait que devant les liens vers les offres de même secteur tu auras toujours le même nombre.
Cette forme d'affichage correspond alors à ta logique d'affichage.
Mais tout d'abord il faut résoudre le problème de base : Il faut compter le nombre d'offres par secteur.
Puisque tu fais déjà un regroupement par secteur dans ta requête c'est bien, il faut simplement ajouter dans cette requête un champ calculé qui compte le nombre d'offres par secteur : Count(*) avec un GROUP BY secteur.intitule
Mais il y a 2 cas :
1. si tu veux qu'un secteur n'apparaisse qu'une seule fois avec le nombre d'offres qui lui correspondent, il ne faut pas inclure des champs qui définissent l'offre dans le SELECT au risque que les infos des offres d'un secteur soient incluses dans le résultat et produisent des doublons de même secteur et nombre d'offres par secteur
La requête qui retourne alors le nombre d'offre par secteur est :
SELECT secteur.intitule,
Count(*) as nb_offres
FROM secteur, offre_emploi
WHERE secteur.intitule=offre_emploi.milieu_professionnel
GROUP BY secteur.intitule
le champ calculé "nb_offres" est fait d'un Count(*) c'est à dire qu'il compte les enregistrements qui correspondent au critère de regroupement cité dans le GROUP BY. En l'occurence, ce champ retourne le nombre d'offres par secteur.
Exemple :
- secteur1 ---- 2
secteur2 ---- 1
....
où un secteur n'apparait qu'une seule fois avec le nombre des ses offres et c'est dù au regroupement par secteur
Seulement on n'a pas l'information sur le détail des offres
2. Si tu veux récupèrer le détail des offres par secteur :
SELECT offre_emploi.milieu_professionnel, offre_emploi.id, offre_emploi.description
FROM offre_emploi
GROUP BY offre_emploi.milieu_professionnel
Cette requête retourne donc tous les intitulés de secteurs, les id et descriptions des offres. Exemple :
- secteur1 ---- offre1 --- description de offre1
secteur1 ---- offre2 --- --- description de offre2
secteur2 ---- offre3 --- description de offre3
....
ici, le secteur "secteur1" a 2 offres : "offre1" et "offre2"
Dans cette requête l'intitulé d'un secteur se répéte selon le nombre des offres qui lui correspondent. C'est normal et c'est dù à la présence des champs "id" et "description" de l'offre même s'il y a regroupement par secteur.
Le regroupement sert simplement à organiser la sélection avec ou sans le détail des offres
Tu peux exécuter les 2 types de requêtes succéssivement pour satisfaire tes affichage :
1. Affichage du secteur et le nombre de ses offres
2. suivi des affichages des offres qui correspondent à ce secteur en paramètrant la 2° requête par intitulé donné
Proposition de correction
<?
....
//requete SQL R1=secteur + nombre de ses offres
$sql_R1 = "SELECT secteur.intitule, Count(*) as nb_offres
FROM secteur, offre_emploi
WHERE secteur.intitule=offre_emploi.milieu_professionnel
GROUP BY secteur.intitule";
$R1 = mysql_query($sql_R1) or die(mysql_error());
//si il existe une réponse//////////
/////////////////////////////////////////////////
if($R1)
{
//1° boucle qui affiche l'info secteur + nombre d'offres
while ($affichage_R1 = mysql_fetch_array($R1)){
echo "<p>Secteur : $affichage_R1[intitule] ($affichage_R1[nb_offres]) offres";
//requete SQL R2=détail de l'offre d'un secteur donné
$sql_R2 = "SELECT offre_emploi.milieu_professionnel , offre_emploi.id, offre_emploi.description
FROM offre_emploi
WHERE offre_emploi.milieu_professionnel = '$affichage_R1[intitule]'
GROUP BY offre_emploi.milieu_professionnel";
$R2 = mysql_query($sql_R2) or die(mysql_error());
//Sous-Boucle d'affichage des liens qui affiche le lien d'envoi vers les offres du secteur en cours par leur id
while ($R2 && $affichage_R2 = mysql_fetch_array($R2)){ ?>
<p class="Texte"><a href="milieu1.php?id=<? echo $affichage_R2['id']; ?>"><font color="black"><? echo $affichage_R2['description']; ?> <br></font></a></p>
<?
}//end while R2
}//end while R1
} //end if
else
{
echo "il n'y a aucun renseignement correspondant à votre requète";
}
mysql_close($db);
?>
Tu veux :[quote]... un script qui permet d'afficher un secteur d'activité une seule fois et d'afficher le nombre d'offres d'emploi qui correspond à ce secteur d'activité....[/quote]
D'abord, c'est normal qu'il t'affiche le même nombre car tu comptes toutes les offres de tous les secteurs.
En plus et même si tu ne comptais que les offres par secteur ton affichage actuel fait que devant les liens vers les offres de même secteur tu auras toujours le même nombre.
Cette forme d'affichage correspond alors à ta logique d'affichage.
Mais tout d'abord il faut résoudre le problème de base : Il faut compter le nombre d'offres par secteur.
Puisque tu fais déjà un regroupement par secteur dans ta requête c'est bien, il faut simplement ajouter dans cette requête un champ calculé qui compte le nombre d'offres par secteur : Count(*) avec un GROUP BY secteur.intitule
[b]Mais il y a 2 cas :[/b]
[b]1. [/b]si tu veux qu'un secteur n'apparaisse qu'une seule fois avec le nombre d'offres qui lui correspondent, il ne faut pas inclure des champs qui définissent l'offre dans le SELECT au risque que les infos des offres d'un secteur soient incluses dans le résultat et produisent des doublons de même secteur et nombre d'offres par secteur
La requête qui retourne alors le nombre d'offre par secteur est :
[color=darkred][b]SELECT[/b][/color] secteur.intitule, [color=green][b]Count(*) as nb_offres[/b] [/color]
[color=darkred][b]FROM[/b] [/color]secteur, offre_emploi
[color=darkred][b]WHERE[/b][/color] secteur.intitule=offre_emploi.milieu_professionnel
[color=darkred][b]GROUP BY[/b][/color] secteur.intitule
le champ calculé "nb_offres" est fait d'un Count(*) c'est à dire qu'il compte les enregistrements qui correspondent au critère de regroupement cité dans le GROUP BY. En l'occurence, ce champ retourne le nombre d'offres par secteur.
[b]Exemple :[/b]
[list]secteur1 ---- 2
secteur2 ---- 1
....[/list]
où un secteur n'apparait qu'une seule fois avec le nombre des ses offres et c'est dù au regroupement par secteur
Seulement on n'a pas l'information sur le détail des offres
2. Si tu veux récupèrer le détail des offres par secteur :
[color=darkred][b]SELECT[/b][/color] offre_emploi.milieu_professionnel, offre_emploi.id, offre_emploi.description
[color=darkred][b]FROM[/b] [/color] offre_emploi
[color=darkred][b]GROUP BY[/b][/color] offre_emploi.milieu_professionnel
Cette requête retourne donc tous les intitulés de secteurs, les id et descriptions des offres. Exemple :
[list]secteur1 ---- offre1 --- description de offre1
secteur1 ---- offre2 --- --- description de offre2
secteur2 ---- offre3 --- description de offre3
....
[/list]
ici, le secteur "secteur1" a 2 offres : "offre1" et "offre2"
Dans cette requête l'intitulé d'un secteur se répéte selon le nombre des offres qui lui correspondent. C'est normal et c'est dù à la présence des champs "id" et "description" de l'offre même s'il y a regroupement par secteur.
Le regroupement sert simplement à organiser la sélection avec ou sans le détail des offres
Tu peux exécuter les 2 types de requêtes succéssivement pour satisfaire tes affichage :
1. Affichage du secteur et le nombre de ses offres
2. suivi des affichages des offres qui correspondent à ce secteur en paramètrant la 2° requête par intitulé donné
[b]
Proposition de correction[/b]
[php]<?
....
//requete SQL R1=secteur + nombre de ses offres
$sql_R1 = "SELECT secteur.intitule, Count(*) as nb_offres
FROM secteur, offre_emploi
WHERE secteur.intitule=offre_emploi.milieu_professionnel
GROUP BY secteur.intitule";
$R1 = mysql_query($sql_R1) or die(mysql_error());
//si il existe une réponse//////////
/////////////////////////////////////////////////
if($R1)
{
//1° boucle qui affiche l'info secteur + nombre d'offres
while ($affichage_R1 = mysql_fetch_array($R1)){
echo "<p>Secteur : $affichage_R1[intitule] ($affichage_R1[nb_offres]) offres";
//requete SQL R2=détail de l'offre d'un secteur donné
$sql_R2 = "SELECT offre_emploi.milieu_professionnel , offre_emploi.id, offre_emploi.description
FROM offre_emploi
WHERE offre_emploi.milieu_professionnel = '$affichage_R1[intitule]'
GROUP BY offre_emploi.milieu_professionnel";
$R2 = mysql_query($sql_R2) or die(mysql_error());
//Sous-Boucle d'affichage des liens qui affiche le lien d'envoi vers les offres du secteur en cours par leur id
while ($R2 && $affichage_R2 = mysql_fetch_array($R2)){ ?>
<p class="Texte"><a href="milieu1.php?id=<? echo $affichage_R2['id']; ?>"><font color="black"><? echo $affichage_R2['description']; ?> <br></font></a></p>
<?
}//end while R2
}//end while R1
} //end if
else
{
echo "il n'y a aucun renseignement correspondant à votre requète";
}
mysql_close($db);
?>[/php]