Lister les noms des champs d'une table mysql

[Résolu/Fermé]
Signaler
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
-
 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

salut,

Quelque chose comme: table describe;
mais je ne me souviens plus exactement.
Regarde dans le manuel
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
13
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
Messages postés
728
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
19 septembre 2021
13
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.

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