Étudiante en détresse !!!!

Étudiante en détresse !!!! - SQL/NoSQL - Programmation

Marsh Posté le 28-07-2011 à 10:13:17    

Bonjour à tous,
Actuellement en stage dans une entreprise, j'ai pour objectif de mettre en place un logiciel qui gère les demandes d’emplois.
Pour se faire, une application web (html, php, javascript, mysql) à été mise en place. Jusque la tout vas bien  :)  
 
Or pour répondre à une des différentes attentes utilisateurs, je dois réaliser une fonction "rechercher" qui, en fonction des critères de sélection, me renvoie le résultat attendu. Le problème : la recherche peux s'exécuter selon plus de 12 critères différents (localisation, age, mots clés, nom, formation, secteur, habilitation, permis etc).
 
Ma première idée à été de créer une requête spécifique à chaque cas,(exemple d'une demande : recherche un candidat majeur, dans le département 37, de formation commercial ayant le permis b). Cependant, après un petit calcul, je me suis rendu compte qu'il y a plus de 4000 possibilités ce qui rend le traitement cas par cas beaucoup trop long...
 
Autre idée : je souhaiterai fusionner le résultat de plusieurs requêtes SQL (et logique).
Mais techniquement, je ne trouve pas la solution...
 
Voici un exemple concret de se que j’attends :
 
L'utilisateur souhaite afficher le nom et le prénom des candidats qui possèdent le permis B et qui sont dans le département 37.
 
Première requête : "SELECT nom, prenom FROM `candidat` WHERE permis.libellepermis = 'B';
Résultat : DUPONT Simon, DUFOUR David, SELLIER Sylvie
 
Deuxième requête : "SELECT nom, prenom FROM `candidat` WHERE candidat.cp= 37;
Résultat : DUFOUR David, TOM alex
 
Désormais je voudrai connaître une commande qui fusionne ces deux requêtes pour obtenir le résultat suivant :DUFOUR David.
Est ce que c'est possible? Dois-je traitée les 4000 cas?
Merci à ceux qui liront mon problème et essayeront de le résolver  ;)  

Reply

Marsh Posté le 28-07-2011 à 10:13:17   

Reply

Marsh Posté le 28-07-2011 à 10:40:37    


en PHP, je ferai quelquechose comme ça  :  

Code :
  1. $query =  "SELECT nom, prenom FROM `candidat` WHERE 1=1 ";
  2. if($ GET['cp']){
  3.    $cp=mysql_real_escape_string($ GET['cp']);
  4.    $query .= "  AND cp = '$cp' ";
  5. }
  6.  
  7. //et ainsis de suite pour chacun de tes 12 paramètres


---------------

Reply

Marsh Posté le 28-07-2011 à 10:43:39    

Merci pour ta réponse très rapide, je vais tester sa immédiatement =)

Reply

Marsh Posté le 28-07-2011 à 11:04:21    

Sa fonctionne parfaitement, merci à toi flo ;)
Une fois fini, je posterai mon code pour ceux que sa intéresse.
Merci encore biz

Reply

Marsh Posté le 29-07-2011 à 17:28:49    

Bonjour à tous,
J'ai de nouveau un problème que je n'arriva pas à résoudre...
En effet je souhaite réaliser une requête, qui en fonction de la formation d'un candidat choisi me ressort son nom ainsi que son prénom.
 
Ma base de données possède les trois tables suivantes :  `candidat`;`posseder`;`formation`
 
        Candidat                                  posseder                               formation
Nom,prénom,idcandidat                idcandidat,idformation               idformation,intitule
 
Lorsque je sélectionne une seul formation, ma requête fonctionne correctement  
SELECT distinct candidat.nom, candidat.prenom FROM candidat,posseder WHERE 1=1  AND candidat.idCANDIDAT = posseder.idCANDIDAT AND posseder.idFORMATION = '8'
 
Le problème : lorsque j'ajoute une autre formation, la requête me renvoie aucun résultat
 
SELECT distinct candidat.nom, candidat.prenom FROM candidat,posseder WHERE 1=1  AND candidat.idCANDIDAT = posseder.idCANDIDAT AND posseder.idFORMATION = '8'  AND posseder.idFORMATION = '2'
 
Après des heures d'acharnement, je m'en remet à vous pour m'aider.
Merci d'avance cintia  ;)  
 
Ps : par la suite j'aimerai pouvoir sélectionner un candidat résultant de la recherche afin d'afficher directement à l'utilisateur le cv du candidat. Avez vous une solution? j'avais pensé à créer une checkboxe devant chaque candidat avec un bouton afficher cv, est-ce une bonne idée?

Reply

Marsh Posté le 29-07-2011 à 20:40:31    

là , ça va etre un peu plus compliqué.
la requete que tu fais, cherche une ligne de la base de données avec idFormation qui est a la fois égal a 8 et a 2 . Tu comprends donc que tu n'auras pas de résultat

 

Là , on va sortir quelques outils en plus

 

1/ utiliser de belles jointures

Code :
  1. SELECT DISTINCT candidat.nom, candidat.prenom FROM candidat INNER JOIN posseder ON candidat.id = posseder.idcandidat
  2. WHERE 1=1    AND posseder.idFORMATION = '8'
 

2/ aliaser les tables

 
Code :
  1. SELECT DISTINCT c.nom, c.prenom
  2. FROM candidat  AS c
  3.    INNER JOIN posseder AS p ON c.id = p.idcandidat
  4. WHERE 1=1    AND p.idFORMATION = '8'


3/appeler plusieurs fois la meme table

 


Code :
  1. SELECT DISTINCT c.nom, c.prenom
  2. FROM candidat  AS c
  3.      INNER JOIN  posseder AS p1 ON c.id = p1.idcandidat
  4.      INNER JOIN  posseder AS p2 ON c.id = p2.idcandidat
  5. WHERE 1=1    AND p1.idFORMATION = '8' AND p1.idFORMATION = '2'
 

4/on généralise ça avec php

 
Code :
  1. $join = '';
  2. $where ='';
  3. if($ GET['idFormation']){ // c'est un tableau , n'est ce pas ?
  4.    for($cpt = 0 ; $ cpt < sizeof($ GET['idFormation']) ; $ cpt++){
  5.         $idFormation =  $ GET['idFormation'][$cpt];
  6.         $join .="  INNER JOIN  posseder AS p$cpt on c.id = p$cpt.idcandidat ";
  7. $where .=" AND p$cpt.idFORMATION = '8' ";
  8.  
  9.    }
  10.    $cp=mysql_real_escape_string($ GET['cp']);
  11.    $query .= "  AND cp = '$cp' ";
  12. }
  13.  
  14. $query =  "SELECT c.id,c.nom, c.prenom FROM `candidat` AS c $join WHERE 1=1 $where";


 
5/ utiliser des requetes preparées et/ou PDO

 

pour ton lien , tu affiche ton tableau avec des liens
<a href="afficheCV.php?idCandidat=$id">$nom $prenom</a>


Message édité par flo850 le 29-07-2011 à 20:43:15

---------------

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed