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 PostgreSQL Discussion :

Récupération type énuméré


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 861
    Billets dans le blog
    1
    Par défaut Récupération type énuméré
    Bonjour à tous

    J'ai un petit soucis de requête PostgreSQL. J'ai créé un type énuméré. Style CREATE TYPE t_couleur AS ENUM ('trèfle', 'carreau', 'coeur', 'pique')

    D'un autre coté je développe une IHM où je vais offrir à l'utilisateur le choix de la couleur dans un menu déroulant. Je voudrais donc pouvoir récupérer mes 4 valeurs "trèfle", "carreau", ... pour les insérer dans le menu déroulant (et donc ne pas le faire en dur dans mon code quoi).

    Or là, j'arrive à un blocage. Pas moyen de trouver la bonne requête SQL qui me renvoie mes 4 items.

    Si quelqu'un peut m'aider...

    Merci
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #2
    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
    Je ne sais pas si c'est pareil en Postgresql mais quand utilise le type ENUM en MySQL, ce qui est stocké en BDD, c'est l'indice du tableau de valeurs possibles, donc un simple entier.

    Essaie plutôt de créer une table de référence avec tes 4 couleurs et fais une jointure dessus.
    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 !

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Il faut trouver le type par son nom dans la table pg_type et joindre avec pg_enum, en triant éventuellement par l'OID de pg_enum si on veut récupérer le même ordre qu'à la déclaration.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 861
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Je ne sais pas si c'est pareil en Postgresql mais quand utilise le type ENUM en MySQL, ce qui est stocké en BDD, c'est l'indice du tableau de valeurs possibles, donc un simple entier.
    Comme en C donc. Peut-être que c'est la même chose en PostgreSQL. Mais même si c'est le cas, alors ça ne sera pas plus dégradant en terme de perfs ou de de requêtes que passer par le lien dont tu parles (avec clef externe + contrainte d'intégrité référentielle et tout le toutim)

    Citation Envoyé par CinePhil Voir le message
    Essaie plutôt de créer une table de référence avec tes 4 couleurs et fais une jointure dessus.
    Ben en fait, c'est ce que je fais de façon générale. J'ai ce que j'appelle des tables "catalogue". J'avais d'ailleurs prévu pour ça aussi un catalogue.
    Mais conceptuellement, je différencie 3 choses
    1) ce qui évolue très souvent.
    Par exemple si je dois faire un lien entre un livre et son auteur, je créerai une table "livre" et une table "auteur". Et les deux tables pourront évoluer de façon indépendante et relativement souvent selon que l'utilisateur veut rajouter des auteurs ou des livres. Mais en conservant l'intégrité.

    2) ce qui évolue très peu mais qui peut quand-même évoluer
    Par exemple si je dois faire un lien entre un client et son titre (M., Mme, Mlle) ben je créerai alors dans ce cas là une table que j'appelle "catalogue" style "_cat_titre". Cette table pourra évoluer (on pourra rajouter éventuellement "Docteur" ou "Professeur" ou "Maitre" ou ...) mais cette évolution est plus rare. Et il est probable que je ne créerai pas d'IHM pour ça, laissant le soin de passer par pgadmin ou mieux, le mettre en dur dans le script sql de création de la bdd.

    3) ce qui ne peut catégoriquement pas évoluer => typique des couleurs. Et là, je trouvais alors dommage de créer une table juste pour ça avec, comme je l'ai dit, les contraintes d'intégrité, les droits de select et tout et tout alors qu'un simple enum suffit. Mais si je peux pas faire autrement alors je le ferai (pour l'instant j'ai d'ailleurs les deux solutions d'implémentées avec ma table qui contient un enum et aussi une clef sur le catalogue des couleurs). Ainsi, si je peux passer définitivement à l'enum les modifs seront minimes. Et si je dois passer définitivement au catalogue alors me suffit de supprimer la colonne enum.

    Citation Envoyé par estofilo Voir le message
    Il faut trouver le type par son nom dans la table pg_type et joindre avec pg_enum, en triant éventuellement par l'OID de pg_enum si on veut récupérer le même ordre qu'à la déclaration.
    Ca c'est joli. Je m'étais effectivement dit que ça devait être stocké quelque part dans les pg_truc mais là, même si j'arrive à me dépatouiller assez avec ces tables systèmes pour lister les tables de ma bdd et compter leur nb de lignes, je suis pas encore assez au point pour trouver tout seul. Merci à toi pour ces infos...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [c# 2.0][DEBUTANT] type énuméré
    Par dsr57 dans le forum C#
    Réponses: 2
    Dernier message: 13/10/2006, 16h03
  2. Erreur sur récupération type d'input
    Par michaelbob dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/08/2006, 12h12
  3. [D2005] Utilisation des types énumérés
    Par bouha dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 21/07/2005, 22h21
  4. Réponses: 7
    Dernier message: 02/06/2003, 08h38
  5. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46

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