Posez votre question Signaler

Bash et resultat de requete SQL [Résolu]

wally - Dernière réponse le 22 nov. 2008 à 20:35
Bonjour tout le monde,
je cherche à récupérer le resultat d'une requete qui me retourne plusieur ligne
voici mon script shell
requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
mysql -u root -p$rootMysqlPass -e "$requete" | while read RESULTAT
do
    champ1=$(echo "${RESULTAT}"|awk -F\| '{ print $1 }')
    champ2=$(echo "${RESULTAT}"|awk -F\| '{ print $2 }')
    echo "champ1($champ1) - champ2($champ2)"
done

j'aurai voulu que le résultat soit
champ1(valeur_champ1) - champ2(valeur_champ2)
champ1(valeur_champ1) - champ2(valeur_champ2)
champ1(valeur_champ1) - champ2(valeur_champ2)
et au lieu j'ai le resultat
champ1(champ1 champ2) - champ2()
champ1(valeur_champ1 valeur_champ2) - champ2()
champ1(valeur_champ1 valeur_champ2) - champ2()
champ1(valeur_champ1 valeur_champ2) - champ2() 

quelqu'un pourrait-il m'aider svp ?
d'avance merci.
Lire la suite 

Bash et resultat de requete SQL »

8 réponses
Réponse
+0
moins plus
Salut,

Affiche-nous un exemple de sortie générée par ta requête SQL, sans quoi on ne te sera d'aucun secours.
Ajouter un commentaire
Réponse
+0
moins plus
bonjour merci de votre réponse,

j'ai modifier en donnant un nom à champ1 etc...

var_dream=`mysql -u root -p$rootMysqlPass -B --exec="connect ma_base;  SELECT nom,pnom,age FROM ma_table"`
echo "$var_dream"


et la sortie est
nom      prenom   slots     
dupond  jean       32
dumont  benoit   22
pondu    françois  43


et j'aimerai pouvoir faire un traitement sur chaque ligne ( row ) de retour

- boucle sur le resultat de la requête
  nom="valeur du champ nom"
  prenom="valeur du champ prenom"
  age="valeur du champ age"
  
  echo "$nom - $prenom - $age"
- fin de la boucle


Je sais pas si je m'exprime comme il faut
encore merci de votre aide
Ajouter un commentaire
Réponse
+0
moins plus
[tmpfs]$ cat fich
nom      prenom   slots
dupond  jean       32
dumont  benoit   22
pondu    françois  43

[tmpfs]$ while read nom prenom age;do echo "$nom - $prenom - $age";done < fich
nom - prenom - slots
dupond - jean - 32
dumont - benoit - 22
pondu - françois - 43

[tmpfs]$  
Mais bon si c'est juste pour rajouter un tiret entre chaque champ, il y a d'autres voies plus simple pour y arriver ;-))
Ajouter un commentaire
Réponse
+0
moins plus
merci encore de votre réponse,

je n'ai pas compris ou je devais mettre
[tmpfs]$ while read nom prenom age;do echo "$nom - $prenom - $age";done < fich
nom - prenom - age
dupond - jean - 32
dumont - benoit - 22
pondu - françois - 43

[tmpfs]$  


désolé je débute

enfaite je doit utiliser les variable ainsi créer à chaque ligne pour passer des paramètre a une autre exécution

exemple :
- boucle sur le resultat
nom="valeur nom"
prenom="valeur pnom"
age="valeur age"

ici je lance une exécution avec comme argument mes variable
commande1 nom age pnom 
commande2 nom pnom age
- fin de la boucle

Le trait d'union était juste pour tester, je pourrait alors utiliser les variable pour exécuter une action dans sa boucle

et à quoi correspond [tmpfs]$ ?

encore une fois merci de votre aide
Ajouter un commentaire
Réponse
+0
moins plus
requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
mysql -u root -p$rootMysqlPass -e "$requete" | while read nom pnom age; do 
commande1 $nom $age $pnom 
commande2 $nom $pnom $age
done
Bien sur, le séparateur de champ étant un espace ou une tabulation et non pas un "|" auquel cas il faudrait le préciser en début de boucle...
Ajouter un commentaire
Réponse
+0
moins plus
merci beaucoup celà fonctionne parfaitement

j'ai juste un souci c'est que il me retourne en premiere le nom des colonne
requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
mysql -u root -p$rootMysqlPass -e "$requete" | while read nom pnom age; do 
echo "$nom - $pnom - $age"
done

comme je l'ai dit ca marche à merveille grâce à vous et le resultat des echo est
nom - prenom - age
dupond - jean - 32
dumont - benoit - 22
pondu - françois - 43

j'ai mit en gras la ligne concerné
est-il possible d'empêcher le retour des nom de colonne dans le résultat ?

je tiens encore à vous remercie, sans votre aide j'en serait pas là
Ajouter un commentaire
Réponse
+0
moins plus
requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
mysql -u root -p$rootMysqlPass -e "$requete" | sed '1d' | while read nom pnom age; do 
echo "$nom - $pnom - $age"
done
Ajouter un commentaire
Réponse
+0
moins plus
mille fois merci

vous avez résolu définitvement mon problème

grand grand GRAND merci

je signale le sujet résolu :D
Ajouter un commentaire
Ce document intitulé « bash et resultat de requete SQL » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?