Requete mysql mal formulé
Dans un script bash je voudrai interroger la basse de données, seulement je ne trouve pas comment formuler la requete ?
code bash (Linux)
nom_table4="modules_x10"
colonne_recherche4="type"
recherche4="L"
select_noms_colonnes4_1="code_maison_unite"
sql9(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes4_1 FROM $nom_table4 WHERE $colonne_recherche4 LIKE '$recherche4%'"
}
echo $(sql9)
Il m'affiche comme résultat
serveur@debian:~$ e-lall-on B1 B2 C1 E1 E9 serveur@debian:~$
ors il me faut uniquement le résultat avec le "code_maison_unite" E1 E9, il faudrait qu'il m'affiche le résultat comme ceci,
E1 E9
De fàçon a ce qu'il puisse m'afficher
tout ce qu'il trouve qui commence par la lettre "L" dans "type" en m'affichant le résultat de "code_maison_unite" de "E" uniquement, ors il m'affiche toute la basse y compris les autres lettres B1, B2, C1
Bd
+----+-------------------------------------+-------------------+------+
| id | nom_module | code_maison_unite | type |
+----+-------------------------------------+-------------------+------+
| 17 | Lumière du salon | B1 | LD11 |
| 18 | Lumière cheminé | B2 | LM12 |
| 33 | Lumière chambre | C1 | LD11 |
| 65 | Lumière bureau | E1 | LD11 |
| 73 | Lumière salle de sport | E9 | LD11 |
+----+-------------------------------------+-------------------++------+
Je n'arrive pas a formuler la requete ?
Pouvez-vous m'aider ?
Merci.
27 réponses
Formuler une requête MySQL depuis un script Bash afin de filtrer les résultats suppose d'utiliser des critères sur le champ type et sur le code_maison_unite, plutôt que d afficher toute la table. Les propositions centrales suggèrent d'utiliser WHERE type LIKE 'L%' AND code_maison_unite LIKE 'E%' pour ne récupérer que les lignes correspondant à des lumières dont le code est dans le groupe E. Dans les exemples, on voit comment extraire uniquement la colonne code_maison_unite via mysql -e et supprimer l'en-tête avec sed '1d' ou boucler sur les lignes pour n'afficher que E1 et E9. Optionnel mais utile, l'encodage UTF-8 doit être actif pour éviter les caractères accentués affichés comme des points d'interrogation lors de l'affichage des résultats dans le terminal.
-
Bonjour
Avec la requête formulé comme ceci :sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id='$lignes3'"
bash m'affiche
/home/serveur/Domotique/ordres/e-lall-on: line 260: Erreur de syntaxe près du symbole inattendu « done »
/home/serveur/Domotique/ordres/e-lall-on: line 260: 'done'
La ligne 260 estdone
code bashsql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id='$lignes3'" mysql -u $login_db -D $nom_bd -h $hote_db -p$pass_bd --default-character-set=$format_texte -e "$sql06" | sed '1d' | while read lignes6; do done echo "" echo "Requête sql06 :" $sql06
Merci. -
Bonsoir,
j'ai missql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE \'$lignes3%\' " echo "Requete a executer : " $sql06
Rien ne s'affiche
Bash m'afficheRequete a executer : SELECT fichier_cm_lumiere_all_On FROM bash WHERE id LIKE \'%\' ERROR at line 1: Unknown command '\''.
La variable $ligne3 ne s'affiche pas dans le retour de la requête.
Merci. -
bonsoir,
ben alors,
j'ai mis ce que vous m'avez dit
sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE \'" $lignes3"\'" echo "Requete a executer : " $sql06
et bash répond/home/serveur/Domotique/ordres/e-lall-on: line 257: \' : commande introuvable Requete a executer :
La ligne 257 est :
sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE \'" $lignes3"\'"
Merci. -
Bonsoir,
J'ai sais que vous avez modifié votre post précédent, mais voila le résultat après modification de votre post précédent.
j'ai mis :sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '" $lignes3"'" echo "Requete a executer : " $sql06
bash répond/home/serveur/Domotique/ordres/e-lall-on: line 257: ' : commande introuvable Requete a executer :
ligne 257sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '" $lignes3"'"
Merci. -
Bonsoir
A force de maniper sur plusieurs langages, on se perd "oui moi aussi"
Avec ceci :
sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '" $lignes3"'"
Requete a executer = $sql06
mysql -u $login_db -D $nom_bd -h $hote_db -p$pass_bd --default-character-set=$format_texte -e "$sql06" | sed '1d' | while read lignes6; do
echo "resultat test 6 : $lignes6"
done
echo "------ Fin test 6 -----"
echo ""
echo "resultat requête sql06 : $sql06"
il m'affiche/home/serveur/Domotique/ordres/e-lall-on: line 255: ' : commande introuvable /home/serveur/Domotique/ordres/e-lall-on: line 256: Requete : commande introuvable
Ligne 255sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '" $lignes3"'"
Ligne 256Requete a executer = $sql06
Merci. -
bonsoir,
J'ai fait ceci :echo "------ test 6 -----" sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '" $lignes3%"'" Requete a executer = $sql06 mysql -u $login_db -D $nom_bd -h $hote_db -p$pass_bd --default-character-set=$format_texte -e "$sql06" | sed '1d' | while read lignes6; do echo "resultat test 6 : $lignes6" done echo "------ Fin test 6 -----" echo "" echo "resultat sql06 : $sql06"
Il me repond :------ test 6 ----- /home/serveur/Domotique/ordres/e-lall-on: line 254: fg: pas de contrôle de tâche /home/serveur/Domotique/ordres/e-lall-on: line 255: Requete : commande introuvable ------ Fin test 6 -----
Ligne 254 :sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '" $lignes3%"'"
Ligne 255 :Requete a executer = $sql06
Merci. -
ContributeurDans ce cas essayez ainsi :
sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '" $lignes3%"'"
Et rajouter en dessous :
echo "Requete a executer : "$sql06
Voir quelle requête sera exécutée.
Le loup, solitaire et mystérieux. -
Bonsoir,
Cela vient de la variable $Lignes3 de la fin de la requête qui ne s'affiche pas.
Vérification de ma requête tel que je l'ai formulé
resultat sql06 : SELECT fichier_cm_lumiere_all_On FROM bash WHERE id LIKE '%'
Le " LIKE '%' " a la fin de la requête n'affiche pas la variable '$lignes3%'" de la requête sql06
Avec la requête formulé comme vous dite j'avais dèjas testé il y a le même probléme avec la variable a la fin de la requête qui ne s'affiche pas
SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id='$lignes3'
Vérification de votre requêteresultat sql06 : SELECT fichier_cm_lumiere_all_On FROM bash WHERE id=''
merci. -
ContributeurJ'ai une petite question.
Dans ta requête que voici :
SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '$lignes3%'
A quoi correspond $select_noms_colonnes1_2 ainsi que $lignes3 ?
Parce que tel quel, si toute la table s'affiche, c'est normalement qu'il y autant de lignes dans la table.
Ceci dit, est-ce que la valeur de $select_noms_colonnes1_2 est toujours non vide dans la table?
Parce que tel quel, mettons que la colonne id soit toujours non NULL, si la colonne $select_noms_colonnes1_2 elle n'est pas forcément non NULL, alors il est normal avec le like de trouver autant de données et autant de données vides.
Si la valeur de $lignes3 est fixe, c'est à dire qu'on veut chercher les lignes par rapport à la valeur $lignes3 et non pas par rapport à un ID qui contiendrait $lignes3, dans ce cas il ne faut pas faire de LIKE mais plutôt :
SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id='$lignes3'
-
Bonsoir,
ça donne donne exactement la même chose avec en plus le nom de la colonne qu'il affiche en 1er ligne.
Il m'affiche toute la table sur des kilomètresresultat test 6 : fichier_cm_lumiere_all_on resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : e-lall-on resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : e-lall-on resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 :
La table bashid cmu ordre_on fichier_on macro_on ordre_off fichier_off macro_off ordre_dim fichier_dim macro_dim ordre_bri fichier_bri macro_bri heure_minuterie minute_minuterie seconde_minuterie fichier_minuterie macro_minuterie fichier_cm_lumiere_all_on macro_cm_all_on
Ma requête tel que je l'ai formuléresultat sql06 : SELECT fichier_cm_lumiere_all_On FROM bash WHERE id LIKE '%'
Le " LIKE '%' " a la fin de la requête n'affiche pas la variable '$lignes3%'" de la requête sql06
merci. -
ContributeurDéjà en ne faisant que cela, qu'est ce que ça donne :
sql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '$lignes3%'"
mysql -u $login_db -D $nom_bd -h $hote_db -p$pass_bd --default-character-set=$format_texte -e "$sql06" | while read lignes6; do
echo "resultat test 6 : $lignes6"
done
-
Bonsoir,
Décidément, J'ai récupérer l'ids d'un table pour afficher une autre table avec ce code bash avec la variable $lignes3.mysql -u $login_db -D $nom_bd -h $hote_db -p$pass_bd --default-character-set=$format_texte -e "connect $nom_bd; SELECT $select_noms_colonnes5_2 FROM $nom_table5 WHERE $colonne_recherche5_1 LIKE '$recherche5_1%' AND $colonne_recherche5_2 LIKE '$recherche5_2%'" | sed '1d' | while read lignes3; do $lignes3" done
Résultat65 73
mais quand je fait ceci c'est toute la table qui s'affiche sur des kilomètressql06="SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE id LIKE '$lignes3%'" mysql -u $login_db -D $nom_bd -h $hote_db -p$pass_bd --default-character-set=$format_texte -e "$sql06" | sed '1d' | while read lignes6; do echo "resultat test 6 : $lignes6" done
Il m'affiche sur des kilomètresresultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : e-lall-on resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : e-lall-on resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 : resultat test 6 :
au lieu de m'afficher :resultat test 6 : e-lall-on resultat test 6 : e-lall-on
Ou ce trouve mon erreur ?
Merci. -
Bonsoir,
Oui tout a fait, un oublie c'est la fatigue il est tard.
requete="connect domotique; SELECT $select_noms_colonnes5_1 FROM $nom_table5 WHERE $colonne_recherche5_1 LIKE '$recherche5_1%' AND $colonne_recherche5_2 LIKE '$recherche5_2%'" mysql -u $login_db -D $nom_bd -h $hote_db -p$pass_bd --default-character-set=$format_texte -e "$requete" | sed '1d' | while read son_on; do echo "$son_on" done echo ""
Merci. -
ContributeurZ'auriez pas oublié cela par hasard ? :-)
--default-character-set=$format_texte
Comme vous l'aviez mis auparavant.
-
Bonjour,
J'ai mis ceciformat_texte="utf8" requete="connect domotique; SELECT $select_noms_colonnes5_1 FROM $nom_table5 WHERE $colonne_recherche5_1 LIKE '$recherche5_1%' AND $colonne_recherche5_2 LIKE '$recherche5_2%'" mysql -u $login_db -D $nom_bd -h $hote_db -p$pass_bd -e "$requete" | while read son_on; do echo "$son_on" done echo ""
Et il m'affiche le résultat comme ceci avec des "?" a la place des accents ?nom_module Lumi?re plafond salle informatique Lumi?re salle de sport
Comment faire ?
Merci. -
ContributeurCeci est normal, car par défaut la boucle for utilise le séparateur espace " ".
Donc lorsque vous faites votre requête, tout s'affiche correctement.
Par contre lorsque la valeur de retour de SQL2 est parsée dans le FOR, celui-ci incluant les espaces comme séparateur de ligne, alors les valeurs de la table ne sont pas côte à côte mais les unes en dessous des autres.
Un peu de lecture :
https://forums.commentcamarche.net/forum/affich-37620017-comment-lire-un-fichier-ligne-par-ligne
-
Bonjour,
Je viens de faire cette requête et l'affichage est en plusieurs lignes ????
sql2(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes5_1 FROM $nom_table5 WHERE $colonne_recherche5_1 LIKE '$recherche5_1%' AND $colonne_recherche5_2 LIKE '$recherche5_2%'" } for fieldD in $(sql2) ; do echo Nom du module : ${fieldD} done
Il m'affiche le résultat comme ceciNom du module : Lumière Nom du module : plafond Nom du module : salle Nom du module : informatique Nom du module : Lumière Nom du module : salle Nom du module : de Nom du module : sport
Au lieu de me l'afficher comme ceciLumière plafond salle informatique Lumière salle de sport
Merci. -
Bonjour
Je l'ai refait propre, pour ceux qui son intéressé
nom_table4="modules_x10" colonne_recherche4_1="type" recherche4_1="L" select_noms_colonnes4_1="code_maison_unite" colonne_recherche4_2="code_maison_unite" recherche4_2="E" select_noms_colonnes4_1="code_maison_unite" sql9(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes4_1 FROM $nom_table4 WHERE $colonne_recherche4_1 LIKE '$recherche4_1%' AND $colonne_recherche4_2 LIKE '$recherche4_2%'" } echo $(sql9)
En tableaumysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -e"SELECT $select_noms_colonnes4_1 FROM $nom_table4 WHERE $colonne_recherche4_1 LIKE '$recherche4_1%' AND $colonne_recherche4_2 LIKE '$recherche4_2%'"
Merci. -
Bonjour
Ouf ça marche.format_texte="utf8" nom_table4="modules_x10" colonne_recherche4="type" recherche4="L" select_noms_colonnes4_1="code_maison_unite" nom_table4="modules_x10" colonne_recherche3="code_maison_unite" recherche3="E" select_noms_colonnes4_1="code_maison_unite" sql9(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes4_1 FROM $nom_table4 WHERE $colonne_recherche4 LIKE '$recherche4%' AND $colonne_recherche3 LIKE '$recherche3%'" } echo $(sql9)
Résultat affichéE1 E9
Merci. -
ContributeurJ'ai corrigé mon post précédent, je m'étais trompé dans le LIKE.
sql9(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes4_1 FROM $nom_table4 WHERE $colonne_recherche4 LIKE '$recherche4%' AND $colonne_recherche3 LIKE '$recherche3%'"
}
Le loup, solitaire et mystérieux.
- 1
- 2