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

SGBD Perl Discussion :

Récupérer les commentaires d'une BD Mysql


Sujet :

SGBD Perl

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut Récupérer les commentaires d'une BD Mysql
    Bonjour,
    Mysql (pg également) permet de commenter les tables d'une bd (ainsi que les champs).
    Question : Peut on avec perl récupérer ces commentaires?
    Si non, y'a t'il un SGBD qui le permette ?
    actuellement, le code suivant me permet juste de récupérer la structure de chaque table :
    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
     
    if ($dbh != 0) {
                my $sth = $dbh->prepare("describe $tablename");
                $sth->execute;
                my $numRows = $sth->rows;            
                if ($numRows > 0) {
                    print $TABLEINDEX "<table border=1>";                
                    while (my @row = $sth->fetchrow_array()) {
                        print $TABLEINDEX "<tr>";
                        foreach my $col (@row) {
                                $col = "&nbsp;" unless defined $col;
                                $col = "&nbsp;" if ($col eq "");
                                print $TABLEINDEX "<td>$col</td>";
                        }
                        print $TABLEINDEX "</tr>\n";
                    }
                    print $TABLEINDEX "</table>";
                }
                $sth->finish;
            }
    J'ai pas mal cherché sur le forum/net, mais rien trouvé.
    Merci de votre aide.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW TABLE STATUS FROM TABASE
    te permet d'avoir toutes les informations des tables d'une base de données

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut
    Merci djibril
    En plus ça m'a mise sur la voie pour récupérer les commentaires par table avec :
    SHOW FULL COLUMNS FROM TABLE_NAME FROM DATABASE_NAME.
    Bon, je n'ai plus qu'à me pencher sur le script de phpxref pour lui faire afficher l'ensemble des données qui m'interesse.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut Optimisation d'un code ?
    Alors, après avoir fait des recherches via la doc mySql & perl, je suis arrivé à obtenir ce que je recherchais, c.a.d :
    -Obtenir le commentaire sur chaque table de la bd.
    -Obtenir les commentaires sur chaque champs des tables.
    Voici le code que j'ai développé :
    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
    29
    30
    31
     
    print $TABLEINDEX "<h3>Description de la table :</h3>\n\n";
            #Modif -> on récupère la description de la table.
            if ($dbh != 0) {
                my $sql = qq'SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_name = \'$tablename\'';           
                my $row = $dbh ->selectrow_array($sql);
                print $TABLEINDEX "$row";
                }
            #Modif -> on exploite uniquement les champs interessants de la table.
            if ($dbh != 0) {            
                my $sql = qq'SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = \'$tablename\'';           
                $sth = $dbh->prepare($sql);            
                $sth->execute;           
                my $numRows = $sth->rows;
                if ($numRows > 0) {
                print $TABLEINDEX "<table border=1>";            
                while(my @row = $sth->fetchrow_array()){                
                print $TABLEINDEX "<tr>";
                foreach my $col (@row) {            
                $col = "&nbsp;" unless defined $col;
                $col = "&nbsp;" if ($col eq "");            
                print $TABLEINDEX "<td>$col</td>";
                }
                print $TABLEINDEX "</tr>\n";
                }
                print $TABLEINDEX "</table>";
                }
                $sth->finish;            
            } else {
                print $TABLEINDEX "Description de la table non disponible!<br><br>";
            }
    visuellement, le résultat :

    Puis je optimiser ce code
    une seule requète au lieu de deux?
    Ensuite, dans cette requète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $sql = qq'SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_name = \'$tablename\'';
    que signifie 'qq'
    Sans ce 'qq', j'ai une erreur de syntaxe. Je l'ai mis après l'avoir vu dans un script trouvé sur le net, mais sans savoir exactement sa portée.
    Désolé pour les questions idiotes ...
    Merci.

  5. #5
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par WhoIsTiti
    que signifie 'qq'
    Sans ce 'qq', j'ai une erreur de syntaxe.
    qq permet d'encader ta requête de doubles quotes et permet ainsi l'interprétation des variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     my $sql = qq'SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_name = \'$tablename\'';
    équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     my $sql = "SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_name = \'$tablename\'";
    -- Jasmine --

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut
    merci Jasmine pour les précisions concernant la fonction qq.
    Qu'en est il de l'optimisation de mon code Dois je garder les deux requêtes (exploitant des méta données) ou est il possible de n'en faire qu'une Peut être que le code que je fournis n'est pas assez pertinent pour donner une réponse détaillée
    cdt

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Pour fusionner les deux requêtes en une seule, il suffit de faire une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TABLE_COMMENT, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, COLUMN_COMMENT
    FROM INFORMATION_SCHEMA.TABLES T
      INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_SCHEMA = C.TABLE_SCHEMA AND T.TABLE_NAME = C.TABLE_NAME
    WHERE table_name = '$tablename' ;
    Jasmine, en fait, l'équivalent exact de ton qq serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $sql = "SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '$tablename'";
    et ça me semble franchement plus simple !
    L'idée du qq est justement d'éviter de devoir échapper un caractère, en te permettant de choisir des délimiteurs de chaîne qui ne soient pas dans ta chaîne. Donc utiliser qq avec des apostrophes n'apporte pas grand-chose. L'idée serait plutôt de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $sql = qq{SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '$tablename'};
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut
    Merci Antoun de ces précisions.
    Je vois que les requètes avec perl sont identiques à celles que j'ai apprise à faire avec php, seules les fonctions pour l'exploitation des résultats diffèrent.
    Par contre, ta requète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TABLE_COMMENT, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, COLUMN_COMMENT
    FROM INFORMATION_SCHEMA.TABLES T
      INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_SCHEMA = C.TABLE_SCHEMA AND T.TABLE_NAME = C.TABLE_NAME
    WHERE table_name = '$tablename' ;
    a causé l'erreur suivante :
    DBD::mysql::st execute failed: Column 'table_name' in where clause is ambiguous
    que j'ai (correctement ) corrigé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TABLE_COMMENT, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, COLUMN_COMMENT FROM INFORMATION_SCHEMA.TABLES T INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_SCHEMA = C.TABLE_SCHEMA AND T.TABLE_NAME = C.TABLE_NAME WHERE t.table_name = '$tablename'
    Je crois que je peux passer le sujet en résolu ...

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Citation Envoyé par WhoIsTiti Voir le message
    Je crois que je peux passer le sujet en résolu ...
    Je crois aussi
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

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

Discussions similaires

  1. [MySQL] Récupérer les donnés d'une base MySQL
    Par pharaon_98 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/03/2011, 16h48
  2. [MySQL] récupérer les commentaires des champs d'une table myslq
    Par nadh3m dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2010, 18h32
  3. Récupérer les lignes d'une bd MySQL
    Par El-Diablo- dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/03/2008, 16h21
  4. [MySQL] Récupérer les colonnes d'une table MySQL
    Par Jeetiz dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/06/2007, 20h10
  5. Réponses: 5
    Dernier message: 07/09/2006, 14h41

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