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 :

Une requete impossible?


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut Une requete impossible?
    Bonjour,

    J'ai une table ENTITE avec un idEntite et un idTypeEntite.
    L'idEntite est l'identifiant de l'entité et l'iTypeEntite est la catégorie de l'entite, c'est un INTEGER.

    J'ai une table PARAMETRE avec un idEntite (Clé étrangère qui définit à quelle entité appartient ce parametre. Un idTypeParam qui définit la catégorie du parametre. et mon valeurParam qui définit la valeur que l'on souhaite donner à notre parametre.

    Pour avoir une requete qui linéarise les paramètres d'une entité de facon horizontale, je fais une requete de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT *
    FROM   ENTITE
    LEFT OUTER JOIN PARAMETRE A
                ON A.idEntite = ENTITE.idEntite
    LEFT OUTER JOIN PARAMETRE B
                ON B.idEntite = ENTITE.idEntite
    LEFT OUTER JOIN PARAMETRE C
                ON C.idEntite = ENTITE.idEntite
     
    WHERE (ENTITE.idTypeEntite = 1) AND
    (
     
    A.idTypeParam = 1
    AND B.idTypeParam =2
    AND B.idTypeParam =3
    )
    Tant que la ligne pour le PARAMETRE de type 2 existe, c'est bon, j'aurai tous mes résultats.

    Mon problème est que si le PARAMETRE de type 2 est facultatif, je n'aurai pas mes lignes dont le parametre de type 2 manque.

    Je précise que je peux avoir un assez grand nombre de parametre, c'est variable. Globalement ca va entre 4 et 20.

    Existe t-il un moyen, meme en passant par des procédures, que je ne maitrise pas trop, d'avoir une requete qui me met toutes les lignes de résultat ENTITE, peu importe que certains parametres ne soient pas renseignés, une valeur NULL me conviendrait allègrement.

    Je suis sur MySQL.

    Merci beaucoup.

    PS: Je précise que pour un idTypeEntite, j'ai une table qui liste tous les champs qui peuvent être attribués à ce type d'entité, et si ils sont obligatoires ou facultatifs.

    Pour l'instant je me contente de faire des vues, uniquement sur les parametres obligatoires, mais il faudrait que je puisse aussi avoir les colonnes pour les parametres manquants.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Ce que tu souhaites, c'est, pour chaque entité, la valeur de chaque paramètre dans une colonne par paramètre ? C'est bien ça ?
    C'est faisable à condition de faire une jointure par paramètre (soit 20 jointures dans ton cas). Ca risque de donner une requête pas nécessairement optimale .
    Le SQL n'est pas fait pour ce genre de mise en forme... Il vaut mieux transformer ce qui est renvoyé sous forme de lignes en colonnes par un langage applicatif.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    Oui, c'est tout à fait ca, une colonne par type de parametre et une ligne par entité.

    Oui, je sais que j'ai besoin de jointures. Je m'étais trompé dans ma requete exemple qui ne fonctionne pas. Je l'ai corrigée.
    Mais mon problème est justement que ca marche, à condition que tous les parametres soient renseignés.

    Ce que je cherche c'est une requete semblable qui me retournera ma ligne, même si un ou plusieurs parametres n'existe pas dans ma table PARAMETRE, pour l'entité présente dans la table ENTITE.

    Une idée sur la requete, ou la procédure à développer?


    Pour l'instant, je ne me souci pas des performances, une majorité de mes entité, n'auront pas plus de 5,6 parametres.


    Pour la performance, si je vois que ca ne passe pas, je ferai effectivement des tableaux PHP associatifs. Je pense que le mieux, c'est de m'occuper d'un type de parametre, de l'assigner dans un champs associatif de mon tableau pour les entités, puis de faire un push sur une nouvelle colonne de mon tableau pour mon second parametre.... Mais pour l'instant, ma priorité est de résoudre une requete qui réponde à ma première question.

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Ce qui ne fonctionne pas dans ta requête, c'est l'endroit où tu mets les conditions sur le type de paramètre. Avec une jointure externe, et pour obtenir ce que tu veux, il faut les mettre non pas dans la clause WHERE, mais dans la condition de jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM   ENTITE
    LEFT OUTER JOIN PARAMETRE A
                ON A.idEntite = ENTITE.idEntite AND A.idTypeParam = 1
    LEFT OUTER JOIN PARAMETRE B
                ON B.idEntite = ENTITE.idEntite AND B.idTypeParam = 2
    LEFT OUTER JOIN PARAMETRE C
                ON C.idEntite = ENTITE.idEntite AND C.idTypeParam = 3
    WHERE (ENTITE.idTypeEntite = 1)
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    Comment te dire, à part que tu es mon sauveur, et qu'après de multiples recherches, je n'avais pas trouvé.

    Un ENORME Merci.

    PS: vraiment merci d'avoir pris le temps.

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

Discussions similaires

  1. Une requete impossible !
    Par SkyBack dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/09/2007, 15h52
  2. Impossible d'exporter le résultat d'une requete avec Runtime
    Par papatte62360 dans le forum Runtime
    Réponses: 4
    Dernier message: 24/11/2006, 12h48
  3. Réponses: 7
    Dernier message: 12/05/2006, 17h21
  4. Impossible de réaliser une requete d'insertion
    Par steinfield dans le forum Access
    Réponses: 10
    Dernier message: 28/04/2006, 13h31

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