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   -
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.

27 réponses

  • 1
  • 2
  1. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    Pourquoi ne pas regarder dans les logs mysql si elles sont actives quelle requête a été exécutée ?
    0
  2. xunil2003 Messages postés 766 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
  3. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    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
  4. xunil2003 Messages postés 766 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
    1. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
       
      Et le résultat?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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

    Y a aucun résultat qui s'affiche ?

    Merci
    0
  7. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    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
  8. xunil2003 Messages postés 766 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
  9. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    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
  10. xunil2003 Messages postés 766 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
  11. xunil2003 Messages postés 766 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
  12. xunil2003 Messages postés 766 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
  13. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    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
  14. xunil2003 Messages postés 766 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
  15. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    Z'auriez pas oublié cela par hasard ? :-)

    --default-character-set=$format_texte

    Comme vous l'aviez mis auparavant.
    0
  16. xunil2003 Messages postés 766 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
  17. xunil2003 Messages postés 766 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
  18. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    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
  19. xunil2003 Messages postés 766 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
  20. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    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
  21. xunil2003 Messages postés 766 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
  • 1
  • 2