Je joint donc grace aux entrées que j'ai mis en gras.
Voici ma requête :
SELECT UNIX_TIMESTAMP(ca.datepostulation) as date, ca.id, ca.idmembre as idmembre,
ca.etat, ca.categorie, co.competence as competence
FROM categories AS ca INNER JOIN competences as co ON ca.id = co.idcategorie WHERE ca.categorie = "Développeur" AND ca.etat="1" AND co.type="spe" AND co.competence="PHP/MYSQL"
Je veux enfaite afficher pour chaque membre ceux qui ont pour ca.categorie= Développeur et dont les compétence de type=spe sont le PHP/MYSQL.
Or cette requête me donne deux ou trois resultat par membre avec un affichage qui veut rien dire etc...
Ou est le problème dans cette requête ?
Merci d'avance !
T'ry.
SELECT co.competence, co.type, co.temps, co.note, co.id, ca.dispo as dispo, ca.refs, m.pseudo, ca.id AS idcategorie,
ca.categorie, DATE_FORMAT(datepostulation, "%d/%m/%Y") AS date, m.categorie AS droitsmembre, m.id AS idmembre
FROM categories AS ca LEFT JOIN membres AS m ON m.id=ca.idmembre
LEFT JOIN competences AS co ON co.type="spe" AND co.idcategorie=ca.id WHERE m.valide=1 AND ca.etat=1 AND ca.categorie="Développeur"
C'est un peu plus clair mais l'affichage se fait en fonction des compétence (une ligne par compétence) et non pas en fonction de la personne
J'avais remis l'idmembre dans la table catégorie au cas ou pour + de simplicité...
Mais je comprend pas ce que tu veux dire, merci de ton intérêt mais je galère depuis environ 2 heures je ne vois pas qu'est ce qui cloche.
Tu as un soucis de logique si tu mets l'idmembre dans catégorie, tu crées une relation définissant que pour 1 catégorie tu n'as qu'1 seul membre ?!
[ed]
Si un membre ne peut avoir qu'une seul compétence, tu dois retrouver un id_competence dans ta table membre, s'il peut en avoir plusieurs, il te manque une table d'association.
Ensuite, c'est sans doute les compétences qui sont catégorisées donc l'id_categorie doit appartenir à la table compétence si tu n'admets qu'un seule catégorie/compétence sinon il te manque encore une table...
[/ed]
C'est la table catégorie.
Enfaite le principie est le suivant :
L'individu s'inscrit en tant que developpeur par exemple, ses information vont dans cette table et dans membres. Lorsqu'il s'inscrit on lui demande également ses compétence qui vont dans la table compétence.
Suis-je clair ?
Non, pour le moment on a
- Des membres stockés dans une table MEMBRE
- Des compétences stockées dans une table COMPETENCE
- Un table MEMBRE_COMPETENCE définissant qui sait faire quoi
A quoi sert catégorie, et surtout à quoi correspond le champs refs de cette dernière ?
- MEMBRE OK
- Ta table COMPETENCE correspond à ce que ce j'appellais MEMBRE_COMPETENCE
- finalement tu n'as pas de table définissant les compétences.
après
- l'id_categorie appartient à ta pseudo table COMPETENCE, donc une catégorie par compétence (enfin j'espère sinon bonjour le merdier, car la compétence étant définie plusieurs fois la catégorie correspondante pourrait varier).
J'ai fini par comprendre que toutes les infos (ou presque) de catégorie correspondaient à un dernier POST...
Bref pour en revenir à ton problème, hormis toutes les erreurs de design de ta base, ta requête se résume à
select m.*
from membre m
inner join competence co
on co.idmembre = m.id
and co.competence = 'PHP/MYSQL'
-- si tu peux avoir le même nom de compétence dans plusieurs catégories
inner join categorie ca
on ca.categorie = 'Développeur'
and ca.id = co.idcategorie
Merci en tout cas du temps que tu m'accordes.
Ta requête fonctionne. Mais le HIC c'est que je l'effectue dans le cadre d'une recherche.
Donc enfaite cette ligne : and co.competence = 'PHP/MYSQL'
peut disparaitre si la recherche se fait sans critère. or si on la supprime on se retrouve dans la même situation que tout à l'heure c'est à dire une ligne par compétence...
Un véritable casse-tête
Voila l'exemple de recherche sans critère :
Je résume ce que je cherche à faire : Je veux afficher ligne par ligne comme sur l'image les compétences de type spe(table compétences), la disponibilité et la date de postulation de chaque membre.
Nan je me suis mal expliqué. Si je fait disparaitre cette ligne, il se passe comme sur l'image, c'est à dire que ta requête donne le même resultat que l'initiale !
C'est normal, tu auras autant de fois le même membre dans ton résultat que tu auras de compétences (pour le membre) relatives à la catégorie recherchée.
La question à te poser c'est:
- cherches-tu des membres ? si oui (select distinct ...)
- cherches-tu les compétences des membres ? si oui (select m.*, co.* ...)
Tracker.
Requete SQL jointure
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales