[Sql] moteur de recherche par affinitées
|
07-05-2012, 04h46
(Modification du message : 19-11-2012, 18h50 par InstinctHack.)
Message : #1
|
|
Saitek
Membre Messages : 30 Sujets : 4 Points: 0 Inscription : Oct 2011 |
[Sql] moteur de recherche par affinitées
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 ? |
|
07-05-2012, 21h38
(Modification du message : 08-05-2012, 10h08 par supersnail.)
Message : #2
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,614 Sujets : 72 Points: 466 Inscription : Jan 2012 |
RE: moteur de recherche par affinitées
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 : +----------------------+ +-----------+
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
08-05-2012, 09h18
Message : #3
|
|
Booster2ooo
Contributeur Messages : 165 Sujets : 14 Points: 63 Inscription : Aug 2011 |
RE: moteur de recherche par affinitées
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 |
|
08-05-2012, 11h36
Message : #4
|
|
EpicOut
Membre actif Messages : 121 Sujets : 10 Points: 23 Inscription : Feb 2012 |
RE: moteur de recherche par affinitées
Booster: Pute
Plein de mouches peuvent rentrer en boucle close.
|
|
09-05-2012, 23h42
Message : #5
|
|
Saitek
Membre Messages : 30 Sujets : 4 Points: 0 Inscription : Oct 2011 |
RE: moteur de recherche par affinitées
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
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 ifflote: |
|
10-05-2012, 08h59
Message : #6
|
|
Booster2ooo
Contributeur Messages : 165 Sujets : 14 Points: 63 Inscription : Aug 2011 |
RE: moteur de recherche par affinitées
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 ) |
|
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)