IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

ma requête ne m'affiche pas tous les résultats


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut ma requête ne m'affiche pas tous les résultats
    Bonsoir,

    j'ai un soucis avec ma requête qui ne me retourne pas le résultat que je souhaite. Alors voila, tout d'abord j'ai plusieurs tables, que voici
    manoeuvres :
    • id_man (auto-incrémenté)
    • titre (varchar qui désigne le nom de la manœuvre)
    • service (varchar qui désigne le service affecté pour la manoeuvre soit '2eme REP' soit 'Legion' )


    ma seconde table personnels :
    • id_pers (auto-incrémenté)
    • nom
    • prenom


    puis ma table realisation qui contient les manoeuvres que les personnes réalisent :
    • id_rea (auto-incrémenté)
    • militaire (l'id de la table personnel)
    • manoeuv (l'id de la table manoeuvre)


    Et c'est à ce moment que ça bloque, voila ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CONCAT(pr1.nom,' ', pr1.prenom) AS name, man.id_man, man.titre, pt.manoeuv FROM realisation AS pt 
    RIGHT OUTER JOIN personnels AS pr1 ON pr1.id_pers = pt.militaire
    RIGHT OUTER JOIN manoeuvres AS man ON man.id_fma = pt.manoeuv
    AND man.service = 'Legion'
    ORDER BY pr1.nom, man.titre
    Cette requête m'affiche dans un tableau croisé (en php je vous passe le code)
    le nom et prénom dans les colonnes
    le titre de la manoeuvre dans les lignes
    et lorsque la personne a réalisé une manoeuvre, je place un '1' dans la jonction de la ligne et colonne correspondante.

    Mais le premier PROBLÈME est le suivant, je n'ai pas dans mes colonnes le (nom et prenom) de toutes les personnes de ma table personnels mais seulement ceux qui ont déjà effectué une manoeuvre, donc ceux présents dans ma table realisation
    Pourtant j'ai bien mis un ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RIGHT OUTER JOIN personnels
    Et le dernier PROBLÈME est que ma condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND man.service = 'Legion'
    n'a aucun effet,
    car j'ai dans mes lignes toutes les manoeuvres de ma tables manoeuvres alors que je voudrais seulement les manoeuvres de la 'Légion' et pourtant j'ai bien utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RIGHT OUTER JOIN manoeuvres AS man ON man.id_fma = pt.pointer_fma
    AND man.service = 'Legion'
    Donc je m'en remets à vous, qui peut-être pourriez m'aider, dans l'attente merci de m'avoir lu !

  2. #2
    Membre habitué Avatar de Joel Pinto Ribeiro
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 95
    Points : 145
    Points
    145
    Par défaut
    Déjà je pense que pour prendre en compte ton critere "AND man.service = 'Legion'"

    il faut que tu fasses un inner join .

    Ensuite essaye plutôt de commencer par la table personnels et faire un left outer join.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CONCAT(pr1.nom,' ', pr1.prenom) AS name, man.id_man, man.titre, pt.manoeuv FROM personnels AS pr1
    LEFT OUTER JOIN realisation AS  pt  ON pr1.id_pers = pt.militaire
    Inner JOIN manoeuvres AS man ON man.id_fma = pt.manoeuv
    AND man.service = 'Legion'
    ORDER BY pr1.nom, man.titre
    Jeune ingénieur passionné des technologies Microsoft .NET, ainsi que du partage de connaissances.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    ok, merci Joel Pinto Ribeiro j'ai essayé, ta requête.
    et j'ai maintenant ma condition 'Legion' qui est prise en compte c'est super,
    mais toujours un soucis, car je n'ai pas la totalité du personnels qui s'affiche, mais seulement ceux qui ont réalisé une manoeuvre

    peut être n'est ce pas réalisable en MySQL !!

  4. #4
    Membre habitué Avatar de Joel Pinto Ribeiro
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 95
    Points : 145
    Points
    145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CONCAT(pr1.nom,' ', pr1.prenom) AS name, man.id_man, man.titre, pt.manoeuv,
     
     CASE pt.manoeuv
          WHEN NULL THEN 0
          ELSE 1
       END as realise
     FROM personnels AS pr1
    LEFT  JOIN realisation AS  pt  ON pr1.id_pers = pt.militaire
    LEFT JOIN manoeuvres AS man ON man.id_fma = pt.manoeuv
    AND man.service = 'Legion'
    ORDER BY pr1.nom, man.titre
    plutot comme ça alors?
    Jeune ingénieur passionné des technologies Microsoft .NET, ainsi que du partage de connaissances.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    c'est génial ça fonctionne, mais il faut que tu m'expliques comment fonctionne le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CASE pt.manoeuv
          WHEN NULL THEN 0
          ELSE 1
       END AS realise
    je ne connais pas du tout !

  6. #6
    Membre habitué Avatar de Joel Pinto Ribeiro
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 95
    Points : 145
    Points
    145
    Par défaut
    C'est tout simplement une fonction de test sur le résultat obtenu.

    Il y a une mini doc dessus:

    http://dev.mysql.com/doc/refman/5.0/...functions.html

    En gros tu donnes une variable et selon son résultat tu lui affectes une valeur.
    Jeune ingénieur passionné des technologies Microsoft .NET, ainsi que du partage de connaissances.

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    et bien merci bien, j'ai appris des choses, et tu m'auras bien aidé sur mon projet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mon diaporama ne s'affiche pas à tous les coups !
    Par dekaki dans le forum jQuery
    Réponses: 2
    Dernier message: 17/11/2011, 09h08
  2. [AC-2003] Mon état n'affiche pas tous les enregistrements
    Par yael44 dans le forum IHM
    Réponses: 1
    Dernier message: 01/11/2009, 20h04
  3. Réponses: 17
    Dernier message: 17/07/2008, 23h32
  4. Réponses: 1
    Dernier message: 26/10/2006, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo