N-PN White-Hat Project
[Sql] moteur de recherche par affinitées - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [Sql] moteur de recherche par affinitées (/showthread.php?tid=2032)



[Sql] moteur de recherche par affinitées - Saitek - 07-05-2012

Je dois rendre un truc assez compliqué dans pas longtemps et je vois pas comment le faire U_U

Dans mon site j'ai deux groupes de membres, des élèves et des profs. Le but du site est de permettre aux élèves de trouver le meilleur prof en fonction de ce qu'ils recherchent.
Chaque prof est doté de plusieurs compétences (dans ma base de données les champs : competence0 à competence9).
L'élève doit pouvoir à travers le moteur de recherche choisir le prof qui correspond le plus à ses besoin.
Je pense à une page accessible qu'aux élèves avec une combobox de toutes les compétences disponibles des profs.

Comment je peux choisir le bon professeur ?
En fait, comment regarder lequel a le plus de compétences (competence0 à competence9) par rapport au choix de l'élève.
Serait-ce une requête du style SELECT competence0, competence1 (jusqu'à 9) FROM lesprofs WHERE competence1 = laCaseCoché1 OR competence2 = laCaseCoché2

Les profs pourraient ajouter eux-mêmes leur compétences ce qui poserait alors problème =(

Question bonus : Je pense qu'il y aura énormément de compétences différentes. Comment faire varier le nombre de champs en fonction du prof ? (genre un tel prof aura des champs competence0 a competence5 tandis que l'autre aura de competence0 à competence153 ) ?
Je ne suis pas certain que définir des champs compétence+numéro soit très propre. Vous en pensez quoi ?


RE: moteur de recherche par affinitées - supersnail - 07-05-2012

Bonjour,

Effectivement définir des champs "competeceX" est dégueu et risque de devenir un joyeux bordel :>
Regarde du côté de l'opérateur LIKE en SQL, ça devrait te donner des idées (enfin j'espère :þ).

Sinon tu peux toujours faire une table "competences" qui est reliée à l'uid de l'utilisateur (avec un truc du genre).

Code :
+----------------------+                      +-----------+
| professeur           |                      |competences|
+----------------------+                      +-----------+
| uid                  | <----------          | cid       |
| autres champs        |           ---------> | uid       |
+----------------------+                      | competence|
                                              +-----------+



RE: moteur de recherche par affinitées - Booster2ooo - 08-05-2012

Je plussoie aaSSfxxx, il est nettement plus intelligent de créer une table de relations entre les prof et leurs compétences. Par contre, j'ajouterai une table indépendante de compétences et une table de relations:
[Profs] Id (clé primaire autoincrémentée)| Nom | Prenom | Adresse ...
[Compétences] Id (clé primaire autoincrémentée)| Nom | Descriptif ...
[ProfComp] ProfId | CompId

Tu peux ainsi avoir
Profs
1| aaSSfxxx
2| Saitek
3| Cybersee

Competences
1| HTML
2| ASM
3| Java
4| Reseau
5| TheGame

ProfComp
1|1 (aaSSfxx - HTML)
1|2 (aaSSfxx - ASM)
2|1 (Saitek - HTML)
2|4 (Saitek - Reseau)
2|5 (Saitek - TheGame)
3|1 (CyberSee - HTML)
3|2 (Cybersee - ASM)
...

Mots clés pour tes recherches Google:
primary key (clés primaires)
foreign key (clés étrangères)
relations

Enjoy Wink


RE: moteur de recherche par affinitées - EpicOut - 08-05-2012

Booster: Pute


RE: moteur de recherche par affinitées - Saitek - 09-05-2012

Merci pour vos réponses. LIKE me dit bien quelque chose effectivement. Je vais faire une table prof, une compétences et une qui fera la relation entre les deux. Ce sera bien mieux Smile

Je vais déguster avec les clés je sens mais c'est tout de même bien sympa.
Et aussi sur uid / cid parce que là je suis un peu perdu Confusedifflote:


RE: moteur de recherche par affinitées - Booster2ooo - 10-05-2012

Tu n'es pas obligé de jouer avec des clés mais c'est nettement plus propre. Tu peux faire (schématiser):
int profId = SELECT id FROM professeurs WHERE name = 'Dupont' // Recup l'id de M. Dupont
array[int] compId = SELECT cid FROM profcomp WHERE pid = profId // Recup un tableau d'id de compétences de M. Dupont (via son Id)
for(cid in compId) compName = SELECT name FROM competences WHERE id = cid // Pour chaque id de compétence, récup son nom

Après, toutes les recherches se font sur des ID, tu cherche dans la table de relations les ID des compétences qui t'intéressent et tu retourne les profs correspondants.

(mais c'est quand mm bcp mieux avec des clés étrangères je pense Wink )