Lister les noms des champs d'une table mysql

Résolu
xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour,

Pour réaliser un script sh je voudrais savoir s'il est possible de lister tous les noms des champs présents sur une table mysql.
Ne pas confondre avec lister le contenu des champs
Si oui comment si prendre pour les afficher depuis le shell ?

Merci

4 réponses

  1. Utilisateur anonyme
     
    salut,

    Quelque chose comme: table describe;
    mais je ne me souviens plus exactement.
    Regarde dans le manuel
    0
  2. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonsoir

    Ok j'ai trouvé pour table describe.
    Cependant j'ai fait un script pour sélectionner le champ à modifier d'une requête mysql avec un menu via un numéro.
    Mais je n'arrive pas à avoir le résultat désiré comme ceci ;
    Veuillez sélectionner le champ a modifier : 
    1) id 
    2) nom_module 
    3) code_maison_unite 
    4) code_maison 
    5) code_unite 
    etc....


    Script

    #!/bin/bash 
    #------- CONNECTION A LA BASSE DE DONNES AVEC BASH ------------- 
    hote_db="localhost" 
    nom_bd="domotique" 
    nom_table="modules_x10" 
    login_db="root" 
    pass_bd="xxxxxxxx" 
    
    dossier="/home/laurent/bash/BDD-Mysql"
    nombre=$(IFS=''; { for i in $(ls -al $dossier); do echo "$i"; done } | wc -l)
    fc=$(echo "DESCRIBE $nom_table" | mysql -p$pass_bd -u root $nom_bd | cut -f1) 
    i=1 # on initialise le compteur  
    echo "Veuillez sélectionner le champ a modifier :" 
    while [ $i -le $nombre ];  do 
      echo $i ") $fc " #$(listing)  
      let $[ i+=1 ] # incremente i de 1 a chaque boucle 
    done ; 
    echo "" 
    read modif_champ 
    


    Le résultat
    laurent@PC-ubuntu:~/bash/Ubuntu_12.04$ /home/laurent/bash/BDD-Mysql/bdd-table.sh
    Veuillez sélectionner le champ a modifier :

    1 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    2 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    3 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    4 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    5 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    6 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    7 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    8 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    9 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    10 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    11 ) Field
    id
    nom_module
    code_maison_unite
    code_maison
    code_unite
    nom_commande_On
    nom_commande_Off
    variateur_plus
    variateur_moins
    variateur_automatique
    type
    macro
    emplacement
    concerne
    puissance
    name_on
    input_name_on
    name_off
    input_name_off
    nom_groupe
    laurent@PC-ubuntu:~/bash/Ubuntu_12.04$

    D'où vient mon erreur ?

    Merci
    0
  3. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour,

    j'ai modifié mon code :

    Script
        ar=($(echo "DESCRIBE $nom_table" | mysql -p$pass_bd -u root $nom_bd | cut -f1));   
        echo "Veuillez indiquer votre choix :"   
                select ntit in  ${ar[@]}    
                    do    
        for l in $Reply;    
                            do   
                              if [ $l -lt $cnt ]   
                                then   
                                    ((var=$l-1));   
                                    open ${ar[$var]};   
                                else   
                                    exit   
                              fi   
                            done   
                    done   
    


    Résultat :
        laurent@PC-ubuntu:~$ /home/laurent/bash/BDD-Mysql/bdd-table.sh   
        Veuillez indiquer votre choix :   
        1) Field                  12) type   
        2) id                     13) macro   
        3) nom_module             14) emplacement   
        4) code_maison_unite      15) concerne   
        5) code_maison            16) puissance   
        6) code_unite             17) name_on   
        7) nom_commande_On        18) input_name_on   
        8) nom_commande_Off       19) name_off   
        9) variateur_plus         20) input_name_off   
        10) variateur_moins        21) nom_groupe   
        11) variateur_automatique   
        #? 3   
        /home/laurent/bash/BDD-Mysql/bdd-table.sh: ligne 226 : [: 3 : opérateur unaire attendu   
        laurent@PC-ubuntu:~$


    La ligne 226 est :
      if [ $l -lt $cnt ]


    Ensuite je modifie le champs de ma table comme ceci.
        mysql_cmd="mysql -D $nom_bd -u$login_db -p$pass_bd"   
            $mysql_cmd -e "UPDATE $nom_table SET colonne1='$valeur2' WHERE id=$id "


    Comment puis je faire pour qu'il sache que lorsque l'utilisateur tape 3 cela correspond à "nom_module" ?
    Afin d'envoyer "nom_module" dans la variable $valeur2 pour modifier le champ ?

    Merci.
    0
  4. Utilisateur anonyme
     
    cnt n'est pas défini.
    c'est quoi? le nombre d'élément du tableau ? alors ce serait ${#nomTableau[@]}
    0