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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
9 sept. 2016 à 17:18
Bonjour,

1 - tu utilises l'ancienne extension Mysql (considérée comme obsolète ! )
Je t'invite fortement à passer à mysqli ou ( perso je préfère...) la PDO.

Je t'invite à lire ceci :
- https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete
- https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli

2 - Ton souci concerne la requête elle même ou le code PHP qui l'exécute ?
Si le souci concerne UNIQUEMENT ta requête... c'est dans le forum Bases de données qu'il faut la poser (je pourrais y déplacer cette discussion si besoin).

3 - Je ne suis pas sûr d'avoir compris ta question...
En fait tu cherches à récupérer la liste des postes non-occupés c'est ça ?
Donc les POSTES dont l'ID ne serait pas présent dans la table cdc_gerer... non ?
Un truc du genre :
SELECT *
FROM cdc_fonctions 
WHERE idfonc NOT IN (SELECT idfonc  FROM cdc_gerer );

0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
9 sept. 2016 à 21:36
Bonjour
En fait il faut que je récupére l'ID de la table cdc_fonction qui est dans la table cdc_gerer et qui à une date de fin vide.
Si tu peux regarder à la ligne 22 sur mon premier post je crois que c'est cela qui ne va pas.
Pour tout te dire je suis perdu.
Lorsque j'avais aucune entrée dans la table cdc_gerer voilà ce que la requète me retournait...
Président: poste vacant
Secrétaire: poste vacant
Trésorier: poste vacant

lorsque j'ai fait les entrées
Président: Dupont Pierre
Secrétaire: Dupont Paul

La structure de la table cdc_gerer
idpers  idfonc  ddebut  dfin
int(11)  int(11)  date  date

Merci
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
9 sept. 2016 à 23:46
Tu peux tester cette requête et me dire ce qu'elle te donne ?

SELECT CP.nom
      ,CP.prenom
      ,CF.fonction
      ,CP.fnbur
FROM  dc_fonctions CF 
LEFT JOIN cdc_gerer CG ON CG.idfonc = CF.idfonc
LEFT JOIN cdc_personnes CP ON CP.idpers = CG.idpers 
WHERE CG.dfin = 0
ORDER BY fnbur DESC,fonction,nom,prenom
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
Modifié par papyclic le 10/09/2016 à 13:53
Bonjour
Merci de ta réponse malheureusement elle ne me retourne pas les postes vacants....
J'ai juste corrigé
CF.fnbur au lieu de CP.fnbur
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
10 sept. 2016 à 15:11
Tu l'as testé directement dans ta bdd hein ?
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
10 sept. 2016 à 16:28
je viens de la tester et cela me retourne uniquement les fonctions dont la date est vide.
Pour essayer d'être encore mieux explicite...
Par exemple la fonction "Président-Adjoint" dans le passé cette fonction était occupé mais plus aujourd'hui donc il y a une date de début et une date de fin donc le poste est vacant.
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
10 sept. 2016 à 16:33
en rajoutant
WHERE CG.dfin IS NULL
cela me retourne les fonctions également qui n'ont jamais été occupé
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 sept. 2016 à 02:46
Donc c'est bon non ?

Par contre c'est un OR que j'aurai mis dans la requête :
SELECT CP.nom
      ,CP.prenom
      ,CF.fonction
      ,CP.fnbur
FROM  dc_fonctions CF 
LEFT JOIN cdc_gerer CG ON CG.idfonc = CF.idfonc
LEFT JOIN cdc_personnes CP ON CP.idpers = CG.idpers 
WHERE CG.dfin = 0 
        OR CG.dfin IS NULL 
ORDER BY fnbur DESC,fonction,nom,prenom
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
11 sept. 2016 à 07:47
Bonjour,
Non ce n'ai toujours pas ce que je souhaite malheureusement.
Les entrées retournées sont les fonctions dont la date de fin est "0000-00-00" ou NULL c'est à dire jamais occupé c'est déja ça...
Maintenant il faudrait également les fonctions qui ne sont pas occupées actuellement, mais qu'elles l'ont été dans le passé.
exemple
Président-Adjoint poste occupé 2012-02-04 au 2015-03-01 aujourd'hui Poste vacant.
Merci de ton aide.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
11 sept. 2016 à 23:12
Bonjour,
Pouvez-vous essayez de m'aider s'ils vous plait, je commence à désespérer pour trouver la solution à mon problème.
Je vous remercie.
Bonne nuit à tous.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 sept. 2016 à 23:20

Maintenant il faudrait également les fonctions qui ne sont pas occupées actuellement, mais qu'elles l'ont été dans le passé.


Dans ce cas, tu ajoutes dans ton where une condition sur la date tout simplement.... (http://www.w3schools.com/sql/func_now.asp)

Un truc du genre
SELECT CP.nom
      ,CP.prenom
      ,CF.fonction
      ,CP.fnbur
FROM  dc_fonctions CF 
LEFT JOIN cdc_gerer CG ON CG.idfonc = CF.idfonc
LEFT JOIN cdc_personnes CP ON CP.idpers = CG.idpers 
WHERE CG.dfin = '0000-00-00' 
        OR CG.dfin IS NULL 
        OR CG.dfin <now()
ORDER BY fnbur DESC,fonction,nom,prenom


0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
12 sept. 2016 à 06:59
Bonjour
En fait j'avais déjà essayé mais cela me rencoie toutes les fonctions avec une dates de fin avant la date d'aujourd'hui. Je me pose la question si cela est possible avec le nombre de tutos sur les dates que j'ai regardé.
Il faut me retourner les fonctions innocupées, malgrès tout elles ont quand même une date de fin puisque elles ont été occupé à un moment donnée.
Peut-être la structure de ma table est à revoir?
Merci encore de ton aide.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
12 sept. 2016 à 19:12
bonjour,
Excusez moi d'insister mes encore une grande partie de la journée à essayer de trouver la solution mais en vain.
J'espère encore trouver de l'aide.
je vous remercie.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
13 sept. 2016 à 09:41
Il faudrait un dump (structure + données) pour essayer de comprendre ce qui bloque et comment est fait ta BDD.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
13 sept. 2016 à 14:51
Bonjour, Voici le lien pour la table cdc_gerer
https://www.cjoint.com/c/FInmW7MlmbM
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
13 sept. 2016 à 14:54
Voici le lien pour la table cdc_fonctions
https://www.cjoint.com/c/FInm1r0rmkM
Merci d'essayer de m'aider
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
13 sept. 2016 à 23:01
Bonjour,
avec les 2 liens des captures de mes tables, cela t'aiderai à mieux comprendre pour essayez de m'aider s'il te plait? je suis perdu.
Je te remercie.
Bonne nuit
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
13 sept. 2016 à 23:37
Sauf que c'est un DUMP de tes tables qu'il me faut ;... pas une capture écran ....
Je ne vais pas m'amuser à recréer tes tables à la main alors qu'un DUMP me permet de les créer automatiquement ....
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
14 sept. 2016 à 07:19
Bonjour
La table cdc_fonctions
https://www.cjoint.com/c/FIoe7d5POUM
La table cdc_gerer
https://www.cjoint.com/c/FIofauHz1iM
La table cdc_personnes
https://www.cjoint.com/c/FIofsICB1OM

Je te remercie pour ton aide
Bonne journée
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
15 sept. 2016 à 19:38
Bonjour,
je suis toujours à la recherche d'une solution à mon problème en fait.
Merci
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
17 sept. 2016 à 07:02
Bonjour
Personnes pour essayer de me venir en aide s'ils vous plait.
Cela viens bien de ma requète en fait si vous pouvez déplacer ce post comme me l'a proposé "jordane45" en vous remerciant.
J'essaie de tourner ma requète dans tous les sens mais je n'y arrive pas.
Merci.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
17 sept. 2016 à 21:29
Après avoir chargé tes données et regarder ce qu'il y avait dedans... je ne suis plus très sûr de ce que tu cherches à obtenir.....

Pourrais tu nous faire un dessin ? ( dans un tableau excel... présente nous ce que tu souhaites obtenir comme tableau en te basant sur les données que tu nous as transmis sur ci-joint)
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
18 sept. 2016 à 06:08
Bonjour,
Comme convenu je te joint le fichier excel cela vous montre exactement ce que je souhaiterai obtenir.
Encore merci de m'aider

https://www.cjoint.com/c/FIsegiNAPjM
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 à 14:05
Bonjour
Je suis toujours à la recherche d'une solution, si une personne pourrai m'aider s'ils vous plait
Je vous remercie.
Bonne journée
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
22 sept. 2016 à 19:31
J'ai regardé tes données..... et voulu les adapter à ton tableau....
Le problème .. c'est que ton tableau Excel ne peut pas correspondre.... ou alors tu ne nous as pas tout dit...

Si je prends l'exemple du président....
Dans ton tableau Excel tu mets :
Président: CHIABERTO Gilbert

Hors.. dans les données Excel on trouve :


Donc... comment sais tu que c'est Gilbert le président... et non Marie-Christine ??
De plus... vu les dates de "fin" .. il ne devrait même pas y avoir de président en fait.....

Et c'est pareil pour toutes tes autres lignes.....

Au passage.. dans ta BDD .. la date de fin MAX est le 2016-03-31 ... donc autant dire qu'il n'y a plus personne en poste .....


Lorsque je t'ai demandé un "dessin" .. je t'ai bien dit : En te basant sur les données que tu nous mis à disposition....
Donc soit ton dessin est faux... soit les données fournies ne nous permettent pas de réaliser ce que tu veux...

Voilou.

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 à 20:43
Bonjour
Si mes données après vérification sont exact. Le dernier fichier excel "responsabilité" est exactement ce que je souhaiterai obtenir aujourd'hui en fait comme nous n'avons pas de président-adjoint le poste est vacant.
Car cette responsabilité ayant était occupé dans le passé il y a obligatoirement une date de fin.
Alors excuse moi peut-être je n'arrive pas expliquer réellement mon soucis mais je peux te garantire que toutes les données sont issues de ma BDD et elles sont toutes exact c'est promis.
En fait le président dans la table cdc_gerer l'idfonc est le 1 est l'idpers est le 2 avec une date de fin à 0 donc c'est le président en exercice.
En fait aujourd'hui ma requète me retourne bien les fonctions dont la date de fin est à 0 mais pas le(les) postes qui sont vacants.
Merci et bonne soirée
0