IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Update d'une valeur dans un champ


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Update d'une valeur dans un champ
    Bonsoir,

    Je suis dans l'impasse donc je fais appel à vous et j'espère que vous serez résoudre mon problème.

    Je souhaite modifier une valeur qui se trouve dans un champ texte. D'habitude pour afficher ce champ je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT name, guid, CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1462), ' ', -1) AS UNSIGNED) AS `money`
    FROM `characters`
    Mon problème maintenant est que je souhaite modifier cette valeur, en gros prélever un pourcentage sur ce chiffre pour toutes les occurrences. Quelque chose comme ça mais ca ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE `characters` SET data = (CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1462), ' ', -1) AS UNSIGNED) - (0.05 * CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1462), ' ', -1) AS UNSIGNED)))

    Merci pour votre aide, et sinon est ce possible de le faire?

    Bonne soirée

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    Tu pourrais donner un exemple de ce qu'il y a dans ta colonne `data`, et de ce que tu veux en faire ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Oui bien sur désolé. Le champ data peut contenir une valeur comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    360 0 25 0 1065353216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5495 6328 0 0 100 0 5495 6328 1000 0 100 0 255 4 66308 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1157234688 1157234688 1155745233 1053240066 1069547520 56 56 0 1125808490 1125874026 0 0 0 0 0 0 0 0 0 1065353216 0 0 0 0 247 112 137 215 55 0 1119879168 1120403456 1110704128 1109917696 0 0 0 0 0 2529 0 20 10 0 27 0 0 0 0 1092616192 0 0 0 0 0 0 0 0 0 0 3383 3568 10240 849 184 1025758976 612 184 1025758976 1122928277 1123059349 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 32 0 0 100730625 33554441 1 0 0 8811 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16846 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16848 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 148 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16936 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16847 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16941 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16403 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 187574 1073741824 0 0 187578 1073741824 187271 1073741824 0 0 187590 1073741824 187576 1073741824 187625 1073741824 0 0 187419 1073741824 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 187280 1073741824 187403 1073741824 187401 1073741824 187399 1073741824 187694 1073741824 0 0 0 0 0 0 0 0 0 0 187275 1073741824 0 0 0 0 187274 1073741824 0 0 0 0 0 0 0 0 187637 1073741824 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 779700 173 83558700 0 98 83558775 0 415 65537 0 95 83559675 0 113 83558775 0 414 65537 0 45 83558700 0 162 83559675 0 51 65537 0 126 83558405 0 163 65537 0 183 83558405 0 44 83558700 0 433 65537 0 413 65537 0 150 83558401 0 176 83558700 0 473 83558401 0 136 83558700 0 226 83558700 0 229 83559675 0 55 83558700 0 293 65537 0 54 83558700 0 43 83558700 0 172 83558700 0 160 83558700 0 46 83558401 0 228 83558401 0 148 83558401 0 149 83558401 0 533 83558401 0 713 83558401 0 109 83558775 0 356 4915201 0 118 83558401 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 115 9 0 0 1084227584 0 1092616192 0 0 1082003164 0 0 0 1085308666 1085308666 1085308666 1085308666 1085308666 1085308666 11 0 0 0 1073741824 0 0 0 0 0 0 0 0 0 0 0 0 0 131080 0 0 0 65536 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25140028 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1065353216 1065353216 1065353216 1065353216 1065353216 1065353216 1065353216 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4294967295 0 0 0 0 0 10 10 0 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1033260107 0 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT name, CAST( SUBSTRING_INDEX( SUBSTRING_INDEX( `data` , ' ', 1462 ) , ' ', -1 ) AS UNSIGNED ) AS `money`
    FROM `characters`
    WHERE name = 'eXoria
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    name ; money
    Exoria ; 25140028
    Et donc le calcul que j'aimerais faire c'est retiré par exemple 5% de sa valeur, donc fait un update avec money - 0.05 * money.

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Beurk ! Y'aurait pas comme un souci de modélisation là ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ca on est d'accord, mais je ne suis pas le modélisateur et je ne peux pas changer la modélisation donc je dois contourner le problème.

    Mais comme il n'y a pas beaucoup de réponse je pense que c'est pas possible.

    Dans la doc, il me dise:
    If you want to edit the value of one of these fields, the query to do that is the following but don't forget to backup your table first:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE `characters` SET `data`=CONCAT(CAST(SUBSTRING_INDEX(`data`, ' ', <index>) AS CHAR), ' ', <value>, ' ', 
       CAST(SUBSTRING_INDEX(`data`, ' ', <-(max index - index) - 1>)AS CHAR)) [WHERE ...]
    Replace "<index>" with the index that you want to change (look at table below), "<-(max index - index) -1>" with the negative of the subtraction of the last index (look at table) minus the index that you want to change and finally minus one. Finally replace "<value>" with the new value you want to put.

    Mais j'ai pas réussi à le mettre en application.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    ça doit donner qqch comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE `characters` SET `data` = CONCAT(
      CAST(SUBSTRING_INDEX(`data`, ' ', 1462) AS CHAR),
      CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1462), ' ', -1) AS UNSIGNED) * 0.95,
      CAST(SUBSTRING_INDEX(`data`, ' ', 1592 - 1462) - 1>) AS CHAR)
    )
    WHERE ...
    à tester d'abord sur une copie de ta table !

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE `characters` SET `data` = CONCAT(
      CAST(SUBSTRING_INDEX(`data`, ' ', 1462) AS CHAR),
      CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1462), ' ', -1) AS UNSIGNED) * 0.95,
      CAST(SUBSTRING_INDEX(`data`, ' ', 1592 - 1462) - 1>) AS CHAR)
    )
     
    WHERE name = 'eXoria'
    MySQL a réponduocumentation
    #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 ') AS CHAR)
    )

    WHERE name = 'eXoria'' at line 4
    Ca ne fonctionne pas alors j'ai essayé en enlevant le ">" mais non plus je comprend pas ce qui coince:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE `characters` SET `data` = CONCAT(
      CAST(SUBSTRING_INDEX(`data`, ' ', 1462) AS CHAR),
      CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1462), ' ', -1) AS UNSIGNED) * 0.95,
      CAST(SUBSTRING_INDEX(`data`, ' ', 1592 - 1462) - 1) AS CHAR)
    )
     
    WHERE name = 'eXoria'
    MySQL a réponduocumentation
    #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 ') AS CHAR)
    )

    WHERE name = 'eXoria'' at line 4

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    Tu as raison pour le >, et par ailleurs j'ai merdouillé dans l'interprétation de ta doc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE `characters` SET `data` = CONCAT(
      CAST(SUBSTRING_INDEX(`data`, ' ', 1462) AS CHAR),
      CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 1462), ' ', -1) AS UNSIGNED) * 0.95,
      CAST(SUBSTRING_INDEX(`data`, ' ', -(1592 - 1462) - 1) AS CHAR)
    )
     
    WHERE name = 'eXoria'

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Tu es un dieu, merci ça fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/09/2006, 16h02
  2. Réponses: 5
    Dernier message: 24/05/2006, 15h04
  3. Retrouver une valeur dans un champ en VBA
    Par friiitz dans le forum Access
    Réponses: 6
    Dernier message: 11/05/2006, 16h02
  4. Renvoi d'une valeur dans un champ avec un style
    Par m@thieu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/11/2005, 19h09
  5. Conserver une valeur dans un champs
    Par zakfa dans le forum IHM
    Réponses: 5
    Dernier message: 04/10/2004, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo