Requete mysql mal formulé

xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   -  
xunil2003 Messages postés 765 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)
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.

A voir également:

27 réponses

arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
Pourquoi ne pas regarder dans les logs mysql si elles sont actives quelle requête a été exécutée ?
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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.
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
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.
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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.
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
Et le résultat?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
Bonjour,

Y a aucun résultat qui s'affiche ?

Merci
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
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.
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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.
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
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.
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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.
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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 tableau
mysql -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.
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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 ceci
Nom 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 ceci
Lumière plafond salle informatique  
Lumière salle de sport



Merci.
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
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
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
Bonjour,

J'ai mis ceci
format_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.
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
Z'auriez pas oublié cela par hasard ? :-)

--default-character-set=$format_texte

Comme vous l'aviez mis auparavant.
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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.
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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ésultat
65 
73


mais quand je fait ceci c'est toute la table qui s'affiche sur des kilomètres
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" | sed '1d' | while read lignes6; do  
echo "resultat test 6 : $lignes6" 
done


Il m'affiche sur des kilomètres
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 : 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.
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
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
0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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ètres
resultat 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 bash
 id     
 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.
0
arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
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'

0
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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ête
resultat sql06 : SELECT fichier_cm_lumiere_all_On FROM bash WHERE id='' 


merci.
0