Bonjour,
Je m'occupe actuellement du moteur de recherche d'une plateforme de recrutement. Les candidats peuvent renseigner leurs informations : compétences, études suivies, expérience, et ces informations sont stockées dans des tables différentes. Les candidats sont identifiés par un id_membre, stocké dans une table membre. La table cv contient le titre du poste recherché par le candidat et toutes tables contiennent une colonne id_membre, clé primaire du candidat.
Je développe une fonction de recherche par mots-clefs, qui recherche un mot dans toutes les tables. J'ai donc la requête SQL suivante, qui ne retourne que l'ID du candidat :
SELECT DISTINCT(C.id)
FROM cv C, membres M, cv_competence CO, cv_experience EX, cv_etudes ET
WHERE M.id=C.id_membre
AND ( (LOWER(EX.titre)AND M.id=EX.id_membreLIKE '%mot_cle%'OR LOWER(EX.entreprise)LIKE '%mot_cle%'OR LOWER(EX.description)LIKE '%mot_cle%'OR LOWER(ET.titre)LIKE '%mot_cle%'OR LOWER(ET.ecole)LIKE '%mot_cle%'OR LOWER(ET.description)LIKE '%mot_cle%'OR LOWER(ET.ville)LIKE '%mot_cle%'OR LOWER(CO.titre)LIKE '%mot_cle%'OR LOWER(C.titre)LIKE '%mot_cle%'OR LOWER(CO.description)LIKE '%mot_cle%') )
AND M.id=CO.id_membre
AND M.id=ET.id_membre
Cependant, il m'arrive d'avoir des requêtes ne retournant rien alors qu'elles devraient.
J'ai identifié ce problème comme venant du fait que tous les candidats ne remplissent pas toutes les tables. Par exemple, ils vont remplir leur études mais pas leurs compétences. A ce moment-là je pense que c'est la partie de la requête AND M.id=CO.id_membre qui pose problème (puisqu'il n'existe pas d'id_membre correspondant à M.id dans la table des compétences)
J'ai alors essayé de faire la requête suivante, qui prendrait en compte le fait qu'un champ ne soit pas renseigné :
SELECT DISTINCT(C.id)
FROM cv C, membres M, cv_competence CO, cv_experience EX, cv_etudes ET
WHERE
(((LOWER(EX.titre)LIKE '%php%') OR (M.id=EX.id_membre))OR ((LOWER(EX.entreprise)LIKE '%php%') OR (M.id=EX.id_membre))OR ((LOWER(EX.description)LIKE '%php%') OR (M.id=EX.id_membre))OR ((LOWER(ET.titre)LIKE '%php%') OR (M.id=ET.id_membre))OR ((LOWER(ET.ecole)LIKE '%php%') OR (M.id=ET.id_membre))OR ((LOWER(ET.description)LIKE '%php%') OR (M.id=ET.id_membre))OR ((LOWER(ET.ville)LIKE '%php%') OR (M.id=ET.id_membre))OR ((LOWER(CO.titre)LIKE '%php%') OR (M.id=CO.id_membre))OR ((LOWER(C.titre)LIKE '%php%') OR (M.id=C.id_membre))OR ((LOWER(CO.description)LIKE '%php%') OR (M.id=CO.id_membre)))
Mais cette dernière ne charge pas quand je la teste au préalable sur phpMyAdmin, le site bug et ne répond plus après avoir demandé l’exécution de la requête. Je pense donc que ma requête pose problème, mais je n'arrive pas à savoir en quoi !
En résumé : je souhaite rechercher dans plusieurs champs dans différentes tables une expression pour un moteur de recherche. Seulement il arrive que certains champs n'existent pas, ce qui a pour effet d'altérer les résultats de la recherche.
Je m'excuse si mon message est trop long, mais peut-être cela aidera plus à la compréhension qu'un court message évasif !
Je vous remercie par avance pour toute aide apportée !
edit : mince je n'avais pas vu qu'il y avait une partie du forum dédiée aux problèmes de requêtes désolé !
Partager