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 :

Probleme de vue


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Par défaut Probleme de vue
    Bonjour,

    Je vous explique mon problème en simplifiant les données.

    J'ai deux tables, une table client (idclient, nom, prenom) et une table d'ajout de paramètre au client tabparam (id, idparam, idclient, valeur), chaque client à trois paramètres donc la table tabparam contient :
    1, idparam1, idclient, valeur1
    2, idparam2, idclient, valeur2
    3, idparam3, idclient, valeur3

    Je souhaiterai faire une vue qui m'affiche :
    nom, prenom, valeur1, valeur2, valeur3

    Et là je coince, je n'arrive pas à comprendre comment faire la vue en prenant 3 fois la table tabparam.

    J'obtient seulement
    nom, prenom, valeur1, valeur1, valeur1
    nom, prenom, valeur2, valeur2, valeur2
    nom, prenom, valeur3, valeur3, valeur3

    Merci pour votre aide, Alfouine

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Par défaut
    tu veux transformer des colonnes en lignes.

    avec ta structure de données tu ne pourras jamais obtenir cela.

    ta requete sur tabparam est du style (en gros)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id_client, valeur FROM tabparam
    et donc te renverra toujours un résultat du type (id_client_1, valeur1), (id_client_1, valeur2), (id_client_1, valeur3) ensuite (id_client_2, valeur1), etc.....

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Par défaut
    Ma requête est celle là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE VIEW gmap
    AS SELECT client.*, tabparam.valeur MAPTYPE, tabparam.valeur LATITUDE, tabparam.valeur LONGITUDE
    FROM client, tabparam
    WHERE client.idclient = tabparam.idclient AND tabparam.idparam IN (4,5,6);
    Je pensais qu'en passant par des sous_requêtes, il y avait une possibilité, mais cela dépasse mes compétences.

    Si dès fois quelqu'un a une idée de génie

    Alfouine,

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 133
    Par défaut
    le probleme est que tu n'as qu'une seule colonne valeur dans tabparam, tu n'en as pas 3

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Comme tu as trois paramètres par client, il te faut trois instances de la table des paramètres.
    Avec la syntaxe normalisée depuis 1992 pour les jointures, ça donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE VIEW gmap AS
    SELECT c.*,
      p1.valeur AS MAPTYPE,
      p2.valeur AS LATITUDE,
      p3.valeur AS LONGITUDE
    FROM client AS c
    INNER JOIN tabparam AS p1 ON c.idclient = p1.idclient
    INNER JOIN tabparam AS p2 ON c.idclient = p2.idclient
    INNER JOIN tabparam AS p3 ON c.idclient = p3.idclient
    WHERE p1.idparam = 4
      AND p2.idparam = 5
      AND p3.idparam = 6
    Ceci étant dit, ce que tu cherches à obtenir est de la cosmétique et n'est pas le boulot du SQL mais du langage de l'application cliente.

    De plus, je ne vois pas l'intérêt de stocker ces paramètres dans une table séparée alors qu'ils auraient pu être mis en colonne dans la table client.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il y a plus simple et plus efficace CinePhil :
    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
    17
    18
    CREATE VIEW gmap AS
    SELECT
        c.idclient,
        c.nom,
        c.prenom,
        max(CASE p.idparam WHEN 4 THEN p.valeur END) as MAPTYPE,
        max(CASE p.idparam WHEN 5 THEN p.valeur END) as LATITUDE,
        max(CASE p.idparam WHEN 6 THEN p.valeur END) as LONGITUDE
    FROM
        client AS c
        INNER JOIN tabparam AS p
          ON p.idclient = c.idclient
    WHERE
        p.idparam IN (4,5,6)
    GROUP BY
        c.idclient,
        c.nom,
        c.prenom;

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Il y a plus simple et plus efficace CinePhil :
    Ouaip !
    La cosmétique me donne des boutons !
    Alors je n'ai pas fait d'effort.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Par défaut
    Merci beaucoup pour vos réponses, cela fonctionne.

    Désolé pour les boutons Cinéphil , mais je vais t'apporter plus d'explications.

    J'utilise un logiciel libre de vente en ligne, génial entre parenthèse, qui m'apporte sa propre base et j'ai ajouté un plugin qui vient avec ses propres tables.

    Et ce que je veux faire, c'est optimiser le chargement des données pour googlemap, la solution de la vue me semblait le plus adapté car il n'y aurait aucun traitement au chargement des cartes. Donc forcément la structure ne répondait pas au besoin et cela est plus proche de la bricole que de la cosmétique.
    Mais je trouvais que rajouter une nouvelle couche de code, n'est pas la bonne solution, car code = bugs = maintenance = temps.

    Donc merci beaucoup pour votre participation, j'y vois plus clair

    Alfouine,

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

Discussions similaires

  1. [oracle9] probleme de vue
    Par jacques64 dans le forum SQL
    Réponses: 4
    Dernier message: 17/09/2007, 17h09
  2. [Plone]Probleme de vue de mon new type de contenu
    Par schnito dans le forum Zope
    Réponses: 2
    Dernier message: 09/03/2007, 09h09
  3. probleme de vue sur sous formulaire
    Par fabrice518 dans le forum Access
    Réponses: 12
    Dernier message: 05/09/2005, 10h35
  4. Probleme en vue
    Par vodevil dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2005, 09h57
  5. probleme de vue
    Par delfare dans le forum OpenGL
    Réponses: 8
    Dernier message: 02/09/2004, 16h06

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