Requete mysql mal formulé
xunil2003
Messages postés
766
Date d'inscription
Statut
Membre
Dernière intervention
-
xunil2003 Messages postés 766 Date d'inscription Statut Membre Dernière intervention -
xunil2003 Messages postés 766 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Dans un script bash je voudrai interroger la basse de données, seulement je ne trouve pas comment formuler la requete ?
code bash (Linux)
Il m'affiche comme résultat
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,
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.
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
- 1
- 2
Suivant
-
Pourquoi ne pas regarder dans les logs mysql si elles sont actives quelle requête a été exécutée ?
-
Bonjour,
Le fichier log est vide.root@debian:~# cat /var/log/mysql.log root@debian:~#
Mais a mon avis ce n'est pas une erreur car la requete fonction mais je n'arrive pas a obtenir ce que je voudrai comme résultat.
Merci. -
Effectivement j'ai mal lu.
WHERE $colonne_recherche4 LIKE '$recherche4%'"
Dans ce cas après le WHERE rajouter un AND $colonne_recherche3 LIKE '$recherche3%'
Où :
$colonne_recherche3 = code_maison_unite
$recherche3 = E
Le loup, solitaire et mystérieux. -
Bonjour,
Je n'ai aucune réponse vide.
J'ai ajouté un AND $colonne_recherche3 LIKE '$recherche4%' après le "WHERE $colonne_recherche4"
nom_table4="modules_x10"
colonne_recherche4="type"
recherche4="L"
select_noms_colonnes4_1="code_maison_unite"
colonne_recherche3="code_maison_unite"
recherche3="E"
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 AND $colonne_recherche3 LIKE '$recherche3%'"
}
echo $(sql9)
Êtes-vous sûr qu'il va m'afficher tous ce qui commence par la lettre "L" du champ "type" en m'affichant le résultat du champ "code_maison_unite" comme ceci.E1 E9
Merci. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
Y a aucun résultat qui s'affiche ?
Merci -
Non c'est pas bon.
Vous avez oublié des choses, peut être que je me suis mal exprimé.
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 AND $colonne_recherche3 LIKE '$recherche3%'"
}
Après le WHERE il faut aussi comparer $colonne_recherche4
Donc ça donne :
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. -
Bonjour,
C'est pareil, aucun résultat s'afficche ?
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 '$colonne_recherche4%' AND $colonne_recherche3 LIKE '$recherche3%'" } echo $(sql9)
Bd
+----+-------------------------------------+-------------------+------+
| id | nom_module | code_maison_unite | type module|
+----+-------------------------------------+-------------------+------+
| 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 |
+----+-------------------------------------+-------------------++------+
Il faut qu'il trouve tout ce qui commence par la lettre 'L' du champ "type" et qu'il m'affiche le résultat part le "champ code_maison_unite" mais uniquement "E1 E9" pas "B1 B2 C2", je n'arrive pas a y trier via la requete.
L = c'est les lumières (LM12/LD11).
A = c'est les appareils (AM12/AD10).
C'est requête me permettra d'allumer toutes les lumières du code maison unité du groupe E (E1 E9).
Merci. -
J'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. -
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. -
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,
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. -
Ceci 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,
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. -
Z'auriez pas oublié cela par hasard ? :-)
--default-character-set=$format_texte
Comme vous l'aviez mis auparavant.
-
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. -
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. -
Dé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,
ç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. -
J'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,
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.
- 1
- 2
Suivant