Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1536 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Commande SQL qui ne modifie qu'une seule ligne...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Commande SQL qui ne modifie qu'une seule ligne...

n°2128798
dexenium
Posté le 29-02-2012 à 08:12:17  profilanswer
 

Bonjour à tous !
 
Quelqu'un a-t-il une idée et peut me dire pourquoi cette p#@§%@ de commande Sql ne me modifie qu'une seule et unique valeur :  
 

Code :
  1. UPDATE `mabase`.`matable` SET `monchamp` = 'valeur'
  2. WHERE CONVERT( `monautrechamp` USING utf8 ) = 'valeur'


 
Je veux en fait copier la valeur du champ "monautrechamp" dans le champ "monchamp"
 
Le problème est que ça marche et ça me modifie qu'une seule valeur, si je change la valeur, la valeur est à nouveau modifiée mais une seule fois !!!
Ca fait 2 heures que je suis dessus et je comprends plus.
Je précise que les valeurs sont des mots... est-ce que c'est important avec utf8 ?
 
Je précise aussi que j'utilise cette commande via la console Sql de phpmyadmin
Sinon si vous avez un avis...    
Merci

mood
Publicité
Posté le 29-02-2012 à 08:12:17  profilanswer
 

n°2128859
olivthill
Posté le 29-02-2012 à 11:42:35  profilanswer
 

Le where est une close de restriction.
Pour le confirmer, au lieu d'un update, faire un select :

Select `mabase`.`matable`
WHERE CONVERT( `monautrechamp` USING utf8 ) = 'valeur'

Combien de lignes seront renvoyées par ce select ? Une seule, je pense. Donc, après, il est normal que Update ne mette à jour qu'une ligne.
 
Il faudrait tenter une autre requête :

UPDATE `mabase`.`matable`  
   SET `monchamp` = CONVERT( `monautrechamp` USING utf8 )

n°2128872
dexenium
Posté le 29-02-2012 à 12:10:37  profilanswer
 

merci  
En fait non le where peut renvoyer beaucoup de lignes.
 
Je vais tenter l'autre commande avec un limit qd même  :)

n°2128893
dexenium
Posté le 29-02-2012 à 13:35:05  profilanswer
 

Bon ça me renvoie une erreur :  
 
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONVERT( `monautrechamp` USING utf8 ) = 'valeur' LIMIT 1' at line 2
 
avec cette requête...

Code :
  1. UPDATE `mabase`.`matable` SET `monchamp` = 'Valeur'
  2. CONVERT( `monautrechamp` USING utf8 ) = 'Valeur' LIMIT 1


 [:abnocte invictus]

n°2128908
rufo
Pas me confondre avec Lycos!
Posté le 29-02-2012 à 14:22:08  profilanswer
 

Limit n'est pas utilisable dans un update normalement...
+ pour ce qu'a dit olivthill. Je ne vois pas d'autre explication.
 
T'es sûr que quand tu fais un :

Code :
  1. select * from matable where CONVERT( `monautrechamp` USING utf8 ) = 'valeur'


y'a bien plusieurs valeurs qui sont remontées?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2128909
dexenium
Posté le 29-02-2012 à 14:29:10  profilanswer
 

rufo a écrit :

Limit n'est pas utilisable dans un update normalement...
+ pour ce qu'a dit olivthill. Je ne vois pas d'autre explication.
 
T'es sûr que quand tu fais un :

Code :
  1. select * from matable where CONVERT( `monautrechamp` USING utf8 ) = 'valeur'


y'a bien plusieurs valeurs qui sont remontées?


 
Oui ta commande renvoie "Affichage des enregistrements 0 - 29 (527 total, traitement: 0.0024 sec.)"
 
Sinon pour le limit je le fais tout le temps donc à mon avis ce n'est pas en cause, enfin j'en sais rien...

n°2128916
rufo
Pas me confondre avec Lycos!
Posté le 29-02-2012 à 15:10:21  profilanswer
 

Après vérif dans la doc, effectivement update accepte un limit à la fin. J'aurai appris un truc aujourd'hui :)
 
A noter tout de même que le limit marche uniquement si le update est fait sur une seule table. Si c'est sur du multi-tables, on peut faire que du where (on perd le order by et le limit). C'est très subtil... :/
 
http://dev.mysql.com/doc/refman/5.0/fr/update.html


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2128921
dexenium
Posté le 29-02-2012 à 15:20:43  profilanswer
 

Bon ben ça m'ennuie, ce qui m'inquiète c'est que même mon hébergeur ne sait pas...
Pitin y a un truc là c'est sûr !!!

n°2128925
MEI
|DarthPingoo(tm)|
Posté le 29-02-2012 à 15:29:12  profilanswer
 

Franchement je comprends pas trop l'intérêt de la requête a part pourrir les perfs...
 
Utilise une bind variable pour ta valeur, gère bien la connexion au SGBD pour déclarer le charset que tu va utiliser lors de ta connexion (i.e. que ça soit le même que celui utilisé par ton programme) et envoi ta valeur telle quelle...
 
Parce que convertir une colonne à la volée... mais WTF... :heink:


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2128930
dexenium
Posté le 29-02-2012 à 15:34:13  profilanswer
 

Attention
 

dexenium a écrit :

... j'utilise cette commande via la console Sql de phpmyadmin


 
c'est un truc que je vais faire 1 ou 2 fois dans l'année (c'est pas intégré dans un script php ou autre), en même temps j'ai 8000 fiches à modifier...
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Commande SQL qui ne modifie qu'une seule ligne...

 

Sujets relatifs
Mise en place d'un système de paiement en ligne[SQL] Optimisation de requête sql
RECRUTE CDI - Diplômé en informatique - Expérience requêt SQLRecuperer variable facultative ligne de commande
Requête PL/SQL[MySQL] Problème d'exécution d'une requête SQL
Performances Curseur / Complexité requête SQL[Résolu] [SGBD/SQL] Import MySQL et caractères spéciaux
Plus de sujets relatifs à : Commande SQL qui ne modifie qu'une seule ligne...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR