Bonjour et merci beaucoup de votre aide, c'est chouette de ne pas se sentir toute seule !
@wehtam et @darkstar123456 :
mon problème ne réside pas au niveau de la jointure.
Concrètement la forme de la requête qui me pose problème se situe dans une seule et unique table.
Mes tables sont :
- Employes : les employés
- champ_item : les critères possibles pour les employés
- asso_valeur_champ_item : table qui contient l'association des valeurs des critères avec les employés. Par exemple : critère "permis caces" : 1 pour oui, critère "permis grue", 1 pour oui.
donc j'ai dans la table asso_valeur_champ_item des lignes du type :
- id_employe : 1 par exemple.
- id_champ_item : 27 (par exemple, car c'est l'id du critère permis caces)
- valeur : 1 ou 0
- id_employe : 2 par exemple.
- id_champ_item : 27
- valeur : 1 ou 0
- id_employe : 1 par exemple.
- id_champ_item : 7 (par exemple, car c'est l'id du critère permis grue)
- valeur : 1 ou 0
etc.
En Français ma requête problématique donnerait :
Sélectionne dans la table " asso_valeur_champ_item " tous les employés dont l'"id_champ_item" 27 a pour valeur '1' ET dont l'"id_champ_item" 7 a pour valeur '1'
pour sélectionner ceux qui ont le permis caces ET AUSSI le permis grue.
---
@jreaux62 : Je ne connaissais pas la syntaxe "AND OR", est-ce une erreur dans ta réponse ? cela génère une erreur
Fatal error: Call to a member function fetch_assoc() on boolean in ...
---
j'ai testé en dur ma requête:
si je mets juste :
AND (asso_valeur_champ_item.id_champ_item=27 AND asso_valeur_champ_item.valeur = '1') --> pour avoir ceux qui ont le permis caces
j'ai 29 résultats.
si je mets juste :
AND (asso_valeur_champ_item.id_champ_item=7 AND asso_valeur_champ_item.valeur = '1') --> pour avoir ceux qui ont le permis grue
j'ai 29 résultats (ce sont les mêmes qui ont le permis grue et le caces).
mais si je mets :
AND (asso_valeur_champ_item.id_champ_item=27 AND asso_valeur_champ_item.valeur = '1') AND (asso_valeur_champ_item.id_champ_item=7 AND asso_valeur_champ_item.valeur = '1')
ou
AND ((asso_valeur_champ_item.id_champ_item=27 AND asso_valeur_champ_item.valeur = '1') AND (asso_valeur_champ_item.id_champ_item=7 AND asso_valeur_champ_item.valeur = '1'))
je devrais avoir 29 résultats car ce sont les mêmes items qui ont ces valeurs pour ces critères, mais j'ai 0 résultats.
Peut-être que je devrais essayer de faire des requêtes imbriquées du style
1 2 3 4 5
| select * from asso_valeur_champ_item WHERE (id_champ_item=27 AND valeur = '1')
... WHILE(mes resultats des id_employe qui ont le caces){
select * from asso_valeur_champ_item WHERE (id_champ_item=7 AND valeur = '1') AND id_asso_valeur_champ_item=$row[id_employe]
... WHILE(){
...etc. |
Mais j'ai une trentaine de tris qui peuvent être possibles, voir plus car la création de critères n'est pas limitée et je trouve ça moyennement propre comme requête, et potentiellement lent...
Qu'en pensez-vous ?
Partager