Requète SQL

Résolu/Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 9 sept. 2016 à 17:00
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 28 sept. 2016 à 14:08
Bonjour,
J'ai une requète qui me permet d'afficher les fonctions des responsables de notre association, dont la date de fin est vide. Actuellement il y a un poste vacant donc cette fonction devrait afficher par exemple...
Président-Adjoint: poste vacant
Si par exemple une fonction n'est pas attribuée je souhaiterai pour afficher "poste vacant" je tourne ma requète dans tous les sens mais en vain. Pouvez-vous m'aider s'ils vous plait.
Un grand merci

La table cdc_gerer
idpers
idfonc
ddebut
dfin

la table cdc_fonctions
idfonc fonction fnbur
1 Président 1
2 Président-adjoint 1
3 Secrétaire 1

etc
Voici la fameuse requète...
<?php
$requete  = "SELECT nom,prenom,fonction,fnbur
        FROM cdc_gerer
        RIGHT JOIN cdc_fonctions ON cdc_gerer.idfonc=cdc_fonctions.idfonc
        LEFT JOIN cdc_personnes ON cdc_personnes.idpers=cdc_gerer.idpers
        WHERE cdc_gerer.dfin = 0
        ORDER BY fnbur DESC,fonction,nom,prenom";
$resultat = execRequete($requete,$connexion);

$place = "";
echo "<ul>";
while($r=mysql_fetch_object($resultat)) {
	if($r->fnbur != $place) {
		switch ($r->fnbur) {
			case '0': $domaine = "Autres responsabilités"; break;
			case '1': $domaine = "Bureau"; break;
		}
		echo "</ul><h2>$domaine</h2><ul>";
		$place = $r->fnbur;
	}
	$lien = "javascript:alert('Changer le $r->fonction : à venir...')";
	if(!$r->nom) { $personne = " <span style=\"color:#808080\"><gras>poste vacant</gras></span>"; } else { $personne = "$r->nom $r->prenom"; }
	echo "<li> <a href=\"$lien\">$r->fonction</a>: $personne</li>";
}
?>

27 réponses

jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
22 sept. 2016 à 21:05
Dans ce cas je pense que c'est la structure de tes tables qui ne vont pas..
Par exemple... tu as plusieurs professeurs... sauf qu'il n'y a qu'un seul ID (7).
Comment savoir que tu devrais avoir 1,2 ou 10 prof ??

Je pense que pour simplifier les choses il faudrait organiser ta bdd comme ça :

cdc_personnes : ok
cdc_fonctions : Liste des fonctions : OK
cdc_postes : Liste des Postes (en gros, une ligne par "poste" à occuper avec un lien sur la table cdc_fonction (idfonc) et un lien avec la table cdc_personnes (pour n'y mettre QUE les personnes en poste actuellement...et laisser vide pour les postes vacants)
Et enfin, une table dans laquelle tu pourrais mettre l'historique



0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
22 sept. 2016 à 23:42
merci effectivement c'est une piste

cdc_postes
| idpers | idfonc | ddebut | dfin |

cdc_gerer
à conserver tel quel pour l'historique
| idpers | idfonc | ddebut | dfin |

cdc_fonctions
à conserver tel quel

cdc_personnes
idem

Merci tu peux me dire si c'est bien cela qu'il faudrait réorganiser, je n'arrive pas bien à faire la difference entre les tables cdc_postes et cdc_gerer.
Faut-il mettre également une date de début et de fin dans la table cdc_postes.
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
22 sept. 2016 à 23:56
Actuellement dans cdc_gerer .. tu mets toutes les personnes qui ont occupés un poste .... d'où le souci pour savoir qui occupe quel poste actuellement et si un poste est vacant ou non....

A la limite tu peux garder cette table pour conserver l'historique des postes...
par contre, pour savoir quels postes sont occupés ou vacants..il te faut une table intermédiaire comme ceci je pense :


0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
24 sept. 2016 à 22:17
Bonjour,
J'ai essayé de rédiger ça sur papier il y a un détail qui m'échappe. Aujourd'hui nous avons 4 professeur si l'an prochain il y en a 2
Donc il va en ressortir

idfonction idpers

7 9
7 8
7 poste vacant
7 poste vacant

Alors que ce n'ai pas des postes vacant.
Je ne sais plus peut-être j'ai mal compris.
Je te remercie
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
25 sept. 2016 à 00:06
... Il te suffit de retirer de la liste des postes les 2 professeurs en trop.... c'est à ça que sert cette table.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
26 sept. 2016 à 20:53
Bonjour
je pense avoir compris, je vais commencer de ce pas.
Je te remercie.
Cordialement
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
28 sept. 2016 à 09:47
Bonjour
Excuse moi j'ai besoin de conseil, quelque chose que je n'arrive pas à comprendre en fait.
J'ai donc créé la table cdc_postes comme tu me l'a suggéré malgrès tout les postes vacants ne s'affichent pas.
La structure de cette table j'ai l'idpers à 0 cela a t-il une influence? je te joint une capture juste pour que tu vois et la rquète complète, en te remerciant si tu peux m'aider encore.

https://www.cjoint.com/c/FIChjWtH2Lk
$requete  = "SELECT nom,prenom,fonction,fnbur
FROM cdc_personnes,cdc_postes,cdc_fonctions
WHERE cdc_postes.idpers=cdc_personnes.idpers
AND cdc_postes.idfonc=cdc_fonctions.idfonc";
$resultat = execRequete($requete,$connexion);
$place = "";
echo "<ul>";
while($r=mysql_fetch_object($resultat)) {
	if($r->fnbur != $place) {
		switch ($r->fnbur) {
			case '0': $domaine = "Autres responsabilités"; break;
			case '1': $domaine = "Bureau"; break;
		}
		echo "</ul><h2>$domaine</h2><ul>";
		$place = $r->fnbur;
	}
	$lien = "javascript:alert('Changer le $r->fonction : à venir...')";
	if(!$r->nom) { $personne = " <span style=\"color:#808080\"><gras>poste vacant</gras></span>"; } else { $personne = "$r->nom $r->prenom"; }
	echo "<li> <a href=\"$lien\">$r->fonction</a>: $personne</li>";
}
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
28 sept. 2016 à 14:08
merci j'ai finalement trouvé ce que je voulais obtenir.
Merci
0