Lecture en boucle dans une table mysql
Fermé
xunil2003
-
24 oct. 2013 à 10:10
mamiemando Messages postés 33623 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 11 avril 2025 - 27 oct. 2013 à 23:56
mamiemando Messages postés 33623 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 11 avril 2025 - 27 oct. 2013 à 23:56
A voir également:
- Lecture en boucle dans une table mysql
- Table ascii - Guide
- Table des matières word - Guide
- Confirmation de lecture whatsapp - Guide
- Lecture epub sur pc - Guide
- Accusé de lecture gmail - Guide
7 réponses
mamiemando
Messages postés
33623
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 avril 2025
7 840
Modifié par mamiemando le 25/10/2013 à 11:26
Modifié par mamiemando le 25/10/2013 à 11:26
Le programme en lui-même est assez "choquant" en terme de performances car tu vas initier une connexion et une requête sql par "case" de table à récupérer (nombre de ligne x nombre de colonnes requêtes) ce qui est vraiment pas super.
Selon moi il faut que tu récupères les records qui t'intéressent dans une liste, puis que tu itères sur cette liste pour afficher chaque record à ton idée.
Personnellement je ne le ferais pas en shell, car même si c'est faisable, c'est assez pénible à écrire. Un langage de script (par exemple python) et une surcouche sur ton sgbd (python-mysql) me paraissent bien plus pratiques...
http://zetcode.com/db/mysqlpython/
Bonne chance
Selon moi il faut que tu récupères les records qui t'intéressent dans une liste, puis que tu itères sur cette liste pour afficher chaque record à ton idée.
Personnellement je ne le ferais pas en shell, car même si c'est faisable, c'est assez pénible à écrire. Un langage de script (par exemple python) et une surcouche sur ton sgbd (python-mysql) me paraissent bien plus pratiques...
http://zetcode.com/db/mysqlpython/
Bonne chance
Bonjour,
Je n'ai fait aucune "case" dans mon script ???
Personnellement je n'ai jamais fait de python , et pour l'instant même si c'est assez pénible à écrire en bash, je préfère y réaliser en bash afin d'assimiler correctement le langage.
Quand vous dite :
merci.
Je n'ai fait aucune "case" dans mon script ???
Personnellement je n'ai jamais fait de python , et pour l'instant même si c'est assez pénible à écrire en bash, je préfère y réaliser en bash afin d'assimiler correctement le langage.
Quand vous dite :
Selon moi il faut que tu récupères les records qui t'intéressent dans une liste, puis que tu itères sur cette liste pour afficher chaque record à ton idée.Vous voulez dire dans un tableau ou un fichier.
merci.
mamiemando
Messages postés
33623
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 avril 2025
7 840
26 oct. 2013 à 01:54
26 oct. 2013 à 01:54
Hello on s'est mal compris.
Ce que j'appelais "case" est un champ d'un record (ce qui correspond bien à une case si une table est vue comme un tableau constitué de lignes (les records) et de columns (les champs)). (Mais j'ai fait une erreur dans mon précédent tu génères simplement une requête par colonne, pas une par case).
Dans ton cas tu es intéressé par trois colonnes (name, id, room). Tu engendres donc trois requêtes là ou une suffit. De plus cela part du principe que les valeurs sortent de manière consistente pour les trois requêtes, de sorte que la 1ère valeur d'une requête corresponde bien avec celle de la 2e et 3e colonne. Même si c'est sans doute le cas, c'est risqué.
Si tu veux vraiment le faire en shell, fais carrément une requête mysql sur ces trois colonnes et "pipe" le résultat, au moins tu es sûr que ça se passera bien, par exemple en écrivant quelque chose de ce genre
Bonne chance
Ce que j'appelais "case" est un champ d'un record (ce qui correspond bien à une case si une table est vue comme un tableau constitué de lignes (les records) et de columns (les champs)). (Mais j'ai fait une erreur dans mon précédent tu génères simplement une requête par colonne, pas une par case).
Dans ton cas tu es intéressé par trois colonnes (name, id, room). Tu engendres donc trois requêtes là ou une suffit. De plus cela part du principe que les valeurs sortent de manière consistente pour les trois requêtes, de sorte que la 1ère valeur d'une requête corresponde bien avec celle de la 2e et 3e colonne. Même si c'est sans doute le cas, c'est risqué.
Si tu veux vraiment le faire en shell, fais carrément une requête mysql sur ces trois colonnes et "pipe" le résultat, au moins tu es sûr que ça se passera bien, par exemple en écrivant quelque chose de ce genre
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -e "SELECT name, id, room FROM $nom_table " | awk '{print "NAME", $1, "ID:", $2, "ROOM:", $3;}'
Bonne chance
Bonjour,
Voila ma table :
select_noms_colonnes="name,id_zwave,room"
nom_table="vera"
colonne_recherche="name"
recherche="sonde "
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -e "SELECT $select_noms_colonnes FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'"
+----------------------------------------+----------+---------------------------+
| name | id_zwave | room |
+----------------------------------------+----------+---------------------------+
| Sonde 4 en 1 (température) | 44 | Jardin du haut |
| Sonde 4 en 1 Humidite | 46 | Jardin du haut |
| Sonde Accus Bureau | 36 | Bureau (R.D.C) |
| Sonde Accus Chambre des invités | 52 | Chambre des invités (RDC |
| Sonde Accus S.D.B | 48 | S.D.B (1er étage) |
| Sonde Accus Salon (1er étage) | 13 | Salon (1er étage) |
| Sonde Accus Veranda | 59 | Véranda (1er étage) |
| Sonde Humidite Chambre des invités | 54 | Chambre des invités (RDC |
| Sonde Humidite Veranda | 61 | Véranda (1er étage) |
| Sonde Humidity Salon | 15 | Salon (1er étage) |
| Sonde Humidité S.D.B | 50 | S.D.B (1er étage) |
| Sonde Temperature Bureau | 37 | Bureau (R.D.C) |
| Sonde Temperature Chambre des invités | 53 | Chambre des invités (RDC |
| Sonde Temperature S.D.B | 49 | S.D.B (1er étage) |
| Sonde Temperature Salon | 14 | Salon (1er étage) |
| Sonde Temperature Veranda | 60 | Véranda (1er étage) |
+----------------------------------------+----------+---------------------------+
Avec votre solution j'obtiens le résultat suivant :
ors je n'arrive pas à obtenir le résultat suivant :
Ne vaut-il pas mieux utiliser "sed" au lieu de "awk" ?
Merci.
Voila ma table :
select_noms_colonnes="name,id_zwave,room"
nom_table="vera"
colonne_recherche="name"
recherche="sonde "
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -e "SELECT $select_noms_colonnes FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'"
+----------------------------------------+----------+---------------------------+
| name | id_zwave | room |
+----------------------------------------+----------+---------------------------+
| Sonde 4 en 1 (température) | 44 | Jardin du haut |
| Sonde 4 en 1 Humidite | 46 | Jardin du haut |
| Sonde Accus Bureau | 36 | Bureau (R.D.C) |
| Sonde Accus Chambre des invités | 52 | Chambre des invités (RDC |
| Sonde Accus S.D.B | 48 | S.D.B (1er étage) |
| Sonde Accus Salon (1er étage) | 13 | Salon (1er étage) |
| Sonde Accus Veranda | 59 | Véranda (1er étage) |
| Sonde Humidite Chambre des invités | 54 | Chambre des invités (RDC |
| Sonde Humidite Veranda | 61 | Véranda (1er étage) |
| Sonde Humidity Salon | 15 | Salon (1er étage) |
| Sonde Humidité S.D.B | 50 | S.D.B (1er étage) |
| Sonde Temperature Bureau | 37 | Bureau (R.D.C) |
| Sonde Temperature Chambre des invités | 53 | Chambre des invités (RDC |
| Sonde Temperature S.D.B | 49 | S.D.B (1er étage) |
| Sonde Temperature Salon | 14 | Salon (1er étage) |
| Sonde Temperature Veranda | 60 | Véranda (1er étage) |
+----------------------------------------+----------+---------------------------+
Avec votre solution j'obtiens le résultat suivant :
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -e "SELECT $select_noms_colonnes FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'" | awk '{print "NAME ", $1, "ID:", $2, "ROOM:", $3; }'
NAME name ID: id_zwave ROOM: room
NAME Sonde ID: 4 ROOM: en
NAME Sonde ID: 4 ROOM: en
NAME Sonde ID: Accus ROOM: Bureau
NAME Sonde ID: Accus ROOM: Chambre
NAME Sonde ID: Accus ROOM: S.D.B
NAME Sonde ID: Accus ROOM: Salon
NAME Sonde ID: Accus ROOM: Veranda
NAME Sonde ID: Humidite ROOM: Chambre
NAME Sonde ID: Humidite ROOM: Veranda
NAME Sonde ID: Humidity ROOM: Salon
NAME Sonde ID: Humidité ROOM: S.D.B
NAME Sonde ID: Temperature ROOM: Bureau
NAME Sonde ID: Temperature ROOM: Chambre
NAME Sonde ID: Temperature ROOM: S.D.B
NAME Sonde ID: Temperature ROOM: Salon
NAME Sonde ID: Temperature ROOM: Veranda
ors je n'arrive pas à obtenir le résultat suivant :
NAME : Sonde 4 en 1 (température)
ID : 44
ROOM : Jardin du haut
NAME : Sonde 4 en 1 Humidite
ID : 46
ROOM : Jardin du haut
NAME : Sonde Accus Bureau
ID : 36
ROOM : Bureau (R.D.C)
NAME : Sonde Accus Chambre des invités
ID : 52
ROOM : Chambre des invités (RDC
NAME : Sonde Accus S.D.B
ID : 48
ROOM : S.D.B (1er étage)
ETC....
Ne vaut-il pas mieux utiliser "sed" au lieu de "awk" ?
Merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33623
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 avril 2025
7 840
27 oct. 2013 à 01:02
27 oct. 2013 à 01:02
Ne vaut-il pas mieux utiliser "sed" au lieu de "awk" ?
Disons que awk permet de faire plus de choses, mais si sed est suffisant, pourquoi ne pas utiliser sed.
Pour revenir à la syntaxe awk il suffit de rajouter des retours à la ligne ou de faire plusieurs print.
En fait il faut bien comprendre que awk a une syntaxe fortement inspirée du C et que c'est vraiment un langage de programmation. Là il se trouve qu'on écrit tout sur une ligne qu'on passe en paramètre à awk, mais si on devrait écrire le script correspondant on écrirait, par exemple :
Bonne chance
Disons que awk permet de faire plus de choses, mais si sed est suffisant, pourquoi ne pas utiliser sed.
Pour revenir à la syntaxe awk il suffit de rajouter des retours à la ligne ou de faire plusieurs print.
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -e "SELECT name, id, room FROM $nom_table " | awk '{print "NAME", $1; print "ID:", $2; print "ROOM:", $3;}'
En fait il faut bien comprendre que awk a une syntaxe fortement inspirée du C et que c'est vraiment un langage de programmation. Là il se trouve qu'on écrit tout sur une ligne qu'on passe en paramètre à awk, mais si on devrait écrire le script correspondant on écrirait, par exemple :
{
print "NAME", $1;
print "ID:", $2;
print "ROOM:", $3;
}
Bonne chance
xunil2003
Messages postés
766
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2024
14
27 oct. 2013 à 14:50
27 oct. 2013 à 14:50
Bonjour,
Je ne comprend pas avec awk comment afficher au complet la phrase.
Exemple, ici il y a la phase entière de name :
Alors qu'ici non
Pourquoi le champs "name" n'affiche pas la phrase entière et y décale, comment y rectifier ?
Merci
Je ne comprend pas avec awk comment afficher au complet la phrase.
Exemple, ici il y a la phase entière de name :
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -e "SELECT $select_noms_colonnes FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'"
+----------------------------------------+----------+---------------------------+
| name | id_zwave | room |
+----------------------------------------+----------+---------------------------+
| Sonde 4 en 1 (température) | 44 | Jardin du haut |
| Sonde 4 en 1 Humidite | 46 | Jardin du haut |
| Sonde Accus Bureau | 36 | Bureau (R.D.C) |
| Sonde Accus Chambre des invités | 52 | Chambre des invités (RDC |
| Sonde Accus S.D.B | 48 | S.D.B (1er étage) |
| Sonde Accus Salon (1er étage) | 13 | Salon (1er étage) |
| Sonde Accus Veranda | 59 | Véranda (1er étage) |
| Sonde Humidite Chambre des invités | 54 | Chambre des invités (RDC |
| Sonde Humidite Veranda | 61 | Véranda (1er étage) |
| Sonde Humidity Salon | 15 | Salon (1er étage) |
| Sonde Humidité S.D.B | 50 | S.D.B (1er étage) |
| Sonde Temperature Bureau | 37 | Bureau (R.D.C) |
| Sonde Temperature Chambre des invités | 53 | Chambre des invités (RDC |
| Sonde Temperature S.D.B | 49 | S.D.B (1er étage) |
| Sonde Temperature Salon | 14 | Salon (1er étage) |
| Sonde Temperature Veranda | 60 | Véranda (1er étage) |
+----------------------------------------+----------+---------------------------+
Alors qu'ici non
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -e "SELECT $select_noms_colonnes FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'" | awk '{print "NAME", $1; print "ID:", $2; print "ROOM:", $3;}'
NAME name
ID: id_zwave
ROOM: room
NAME Sonde
ID: 4
ROOM: en
NAME Sonde
ID: 4
ROOM: en
NAME Sonde
ID: Accus
ROOM: Bureau
NAME Sonde
ID: Accus
ROOM: Chambre
NAME Sonde
ID: Accus
ROOM: S.D.B
NAME Sonde
ID: Accus
ROOM: Salon
NAME Sonde
ID: Accus
ROOM: Veranda
NAME Sonde
ID: Humidite
ROOM: Chambre
NAME Sonde
ID: Humidite
ROOM: Veranda
NAME Sonde
ID: Humidity
ROOM: Salon
NAME Sonde
ID: Humidité
ROOM: S.D.B
NAME Sonde
ID: Temperature
ROOM: Bureau
NAME Sonde
ID: Temperature
ROOM: Chambre
NAME Sonde
ID: Temperature
ROOM: S.D.B
NAME Sonde
ID: Temperature
ROOM: Salon
NAME Sonde
ID: Temperature
ROOM: Veranda
Pourquoi le champs "name" n'affiche pas la phrase entière et y décale, comment y rectifier ?
Merci
mamiemando
Messages postés
33623
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 avril 2025
7 840
27 oct. 2013 à 23:56
27 oct. 2013 à 23:56
En awk tu précises quel caractère sert de séparateur (par défaut tabulation je crois) a l'aide de la variable IFS.
http://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html
Dans ton cas l'IFS doit correspondre au caractère qui sépare une colonne (piège, le caractère "|" n'est pas le séparateur de colonne reçu au travers d'un pipe). Pour voir les lignes que reçoit awk :
Bonne chance
http://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html
Dans ton cas l'IFS doit correspondre au caractère qui sépare une colonne (piège, le caractère "|" n'est pas le séparateur de colonne reçu au travers d'un pipe). Pour voir les lignes que reçoit awk :
ma_commande | awk '{print "input:", $0}'
Bonne chance