Requete mysql mal formulé

Fermé
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 - 21 août 2012 à 14:01
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 - 29 août 2012 à 12:20
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 mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
21 août 2012 à 18:23
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 21/08/2012 à 19:05
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 mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
Modifié par arth le 21/08/2012 à 19:30
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 21/08/2012 à 19:42
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 mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
21 août 2012 à 19:37
Et le résultat?
0

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

Posez votre question
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
21 août 2012 à 19:47
Bonjour,

Y a aucun résultat qui s'affiche ?

Merci
0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
Modifié par arth le 21/08/2012 à 19:55
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 21/08/2012 à 20:36
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 mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
Modifié par arth le 21/08/2012 à 20:21
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
21 août 2012 à 20:46
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
21 août 2012 à 22:56
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 28/08/2012 à 00:54
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 mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
28 août 2012 à 01:27
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
28 août 2012 à 03:26
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 mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
28 août 2012 à 03:29
Z'auriez pas oublié cela par hasard ? :-)

--default-character-set=$format_texte

Comme vous l'aviez mis auparavant.
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
28 août 2012 à 03:39
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 28/08/2012 à 23:55
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 mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
28 août 2012 à 23:56
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 29/08/2012 à 00:21
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 mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
29 août 2012 à 00:16
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 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 29/08/2012 à 00:34
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