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

SQL Firebird Discussion :

MetaModel et Multicolone


Sujet :

SQL Firebird

  1. #1
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut MetaModel et Multicolone
    Bonjour... J'utilise une base de donné basé sur le principe des MetaModel. Mon problème principal vient du fait que toutes mes données sont dans une et une seul base. J'aimerais en effet sortir de cette même table (et champ ) deux champ different.
    Pour chématiser, j'aimerais pouvoir avoir une requête de la forme
    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
    SELECT NOM
    FROM   VALEURS
    WHERE
           ((SELECT VALEURS.VALEUR as NOM
             FROM   VALEURS
             INNER  JOIN DONNEES ON (DONNEES.ID_VALEUR = VALEURS.ID_VALEUR)
             WHERE
             ((DONNEES.ID_DESCR = -1) AND (DONNEES.ID_LIGNE IN (1)))
           )
           and
            (SELECT VALEURS.VALEUR as PRENOM
             FROM   VALEURS
             INNER  JOIN DONNEES ON (DONNEES.ID_VALEUR = VALEURS.ID_VALEUR)
             WHERE
             ((DONNEES.ID_DESCR = -2) AND (DONNEES.ID_LIGNE IN (1)))
            )
           )
    Vous voillez ? En fait j'ai besoin de faire dans une requête, deux requête, et de stoké le tout dans deux alias...
    Si quelqu'un a une idée... Je cherche depuis bien trois semaine
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    La clause where principale comporte (SELECT...) and (SELECT...), il n'y a pas de test juste des selects...

    Vous voulez récupérer le nom et prémon de plusieurs moyens par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT VALEURS.VALEUR, DONNEES.ID_DESCR
             FROM   VALEURS 
             INNER  JOIN DONNEES ON (DONNEES.ID_VALEUR = VALEURS.ID_VALEUR) 
             WHERE 
             (DONNEES.ID_DESCR in ( -1, -2 ) AND (DONNEES.ID_LIGNE = 1 ))
    Si vous êtes sous FB1.5 vous pouvez même faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT VALEURS.VALEUR, CASE DONNEES.ID_DESCR 
          WHEN -1 THEN 'NOM'
          WHEN -2 THEN 'PRENOM'
          ELSE '??'
        END as ALIAS
             FROM   VALEURS 
             INNER  JOIN DONNEES ON (DONNEES.ID_VALEUR = VALEURS.ID_VALEUR) 
             WHERE 
             (DONNEES.ID_DESCR in ( -1, -2 ) AND (DONNEES.ID_LIGNE = 1 ))

  3. #3
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    C'est pas loing... est c'est déjà une chose que je ne savais pas... mais le vrai but final est d'obtenir les ID_DESC = -1 dans NOM et les ID_DESC = -2 dans PRENOM.
    J'aimerais fusionner c'est deux requêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT VALEURS.VALEUR as NOM
    FROM   VALEURS
      INNER  JOIN DONNEES ON (DONNEES.ID_VALEUR = VALEURS.ID_VALEUR)
    WHERE ((DONNEES.ID_DESCR = -1) AND (DONNEES.ID_LIGNE IN (1, 2)))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT VALEURS.VALEUR as PRENOM
    FROM   VALEURS
      INNER  JOIN DONNEES ON (DONNEES.ID_VALEUR = VALEURS.ID_VALEUR)
    WHERE ((DONNEES.ID_DESCR = -2) AND (DONNEES.ID_LIGNE IN (1, 2)))
    Elles utilisent toutes les deux des données de la table VALEURS en sortie. Mais elles ne corespondent pas à la même chose en fait. Tu aurais encore une ou deux idées .

    Pour information, je suis sous IB6

    Mercie pour ta reponse
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Je me doutais que vous le vouliez dans deux colonnes séparées.

    Mais quel est l'interret ?? Pour moi ce n'est que de la "présentation" et la présentation ce n'est pas le but d'un serveur de données mais plutot le role du programme client.

    Cependant il est possible de les mettre en colonne mais la requete sera bien plus lourde à écrire surtout si vous voulez plus de 2 colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT V1.VALEUR as nom, v2.Valeur as prenom
             FROM  DONNEES D1
             inner join DONNEES D2 on (D2.id_ligne=D1.id_ligne)
             INNER  JOIN VALEURS V1 ON (D1.ID_VALEUR = V1.ID_VALEUR and D1.id_descr=-1)
             inner join valeurs v2 on (D2.id_valeur= V2.id_valeur  and D2.id_descr=-2)
             WHERE 
             (D1.ID_LIGNE = 1)
    Voilà il faut adapté bien entendu les jointures en fonction des données. Si par exemple le prénom n'est pas obligatoire et donc qu'il n'y a pas de id_descr = -2 la requete ci dessus ne retournera rien (même pas le nom...) Il faut mettre un left join devant les données optionnelles.

    Voilà vous voyez que tout dessuite on se retrouve avec une requete qui avant n'avait qu'une seule jointure et une présentation en ligne à une requete à 4 jointures pour une présentation en colonne.
    Si vous voulez une 3eme données en colonne vous allez passer à 6 jointures etc... Alors que la première requete reste à 2 quelques soit le nombre de valeur.

    Sinon il reste l'option de la PS qui pourra faire la présentation un peu plus facilement.
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    SET term ^;
     
    CREATE PROCEDURE MES_DONNES(ID_LIGNE INTEGER)
    RETURNS (
        NOM VARCHAR(50),
        PRENOM VARCHAR(50))
    AS
    declare variable VALEUR VARCHAR(50);
    declare variable ID_DESCR INTEGER;
    BEGIN
      NOM = null;
      PRENOM = null;
      FOR
        SELECT VALEURS.VALEUR, DONNEES.ID_DESCR
             FROM   VALEURS 
             INNER  JOIN DONNEES ON (DONNEES.ID_VALEUR = VALEURS.ID_VALEUR) 
             WHERE 
             (DONNEES.ID_DESCR in ( -1, -2 ) AND (DONNEES.ID_LIGNE = :ID_LIGNE ))
        INTO :VALEUR, :ID_DESCR
      DO
      BEGIN
        if (ID_DESCR=-1) then NOM = VALEUR;
        if (ID_DESCR=-2) then PRENOM = VALEUR;
      END
      SUSPEND;
    END^
     
    SET term ;^

  5. #5
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    C'est vraie que la présentation n'est pas trop le rôle de la BDD... en fait je voulais essayer de trouver une méthode me permettant d'obtenir une version de mes MetaTable de façon a remplir un DataSet... Et je croi qu'au niveau présentation, il n'on pas grand chose de disponible
    Merci ennormement pour cette dernière réponse qui m'a fait voir le nombre de lacune que j'ai
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

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

Discussions similaires

  1. JPA2 : Génération des Metamodel
    Par garthos dans le forum JPA
    Réponses: 2
    Dernier message: 26/07/2011, 18h40
  2. EMF et OAW et metamodele
    Par amira88 dans le forum Eclipse
    Réponses: 0
    Dernier message: 17/10/2009, 15h42
  3. Comment créer un combobox multicolones en VB.NET?
    Par tssi555 dans le forum VB.NET
    Réponses: 10
    Dernier message: 10/08/2009, 13h49
  4. le metamodele JAVA?
    Par thouraya24 dans le forum Général Java
    Réponses: 4
    Dernier message: 28/05/2009, 11h19
  5. Listebox multicolones en vb 2008 express
    Par Capuccino2008 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/02/2008, 11h54

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