update mysql

Nouveau WRInaute
Bonjour à tous!
Une petite présentation pour commencer: j'ai 39 ans, marié et 2 enfants; je suis pour ainsi dire novice en developpement php/mysql, mais je voudrais apprendre!... :D
J'ai un site e-commerce et aimerai mettre les mains dans le cambouis pour ne pas dépendre que de mon prestataire.
Voici mon 1er obstacle donc une 1ere question:
Je voudrais faire une mise à jour hors taxe de la colonne (prix_achat) d'une table (bon_de_commande); j'ai donc fait une requete:
UPDATE bon_de_commande
SET prix_achat = prix_achat/1.196

Pour les valeurs uniques, ça marche, mais il existe (lorsque la commande comporte plusieurs articles, une chaine avec un séparateur $ (exemple: 2.00$15.22$3.50): là je suis bloqué parce que le résultat n'est pas du tout le bon.

Est-ce-que quelqu'un peut m'éclairer et m'indiquer la bonne requete svp?
merci
 
WRInaute accro
Tu ne pourra pas (sauf inconnue de ma part) faire ce genre de travail avec du SQL seulement.
Ton champ de base de données n'étant pas composées de données numériques dans chaque cas.

Si je ne me trompe pas tu devra extraire chaque champ y appliquer le traitement nécessaire et updater la base. Il va te falloir passer par php dans un tel cas.
 
WRInaute discret
Je pense comme zeb, par contre stocker tous les articles d'une commande dans un champ est plutot moyen au niveau de la structure de ta base.
Normalement tu devrais avoir une ligne par article et dans chaque ligne le numéro de commande correspondant (la clé étrangère), dans deux tables séprées. Ca ferait une table de commandes, une table d'articles et une table associant les articles aux commandes.
 
WRInaute impliqué
Oui une des premières règles qu'on apprend en conception de base de données est qu'un champ représente une valeur atomique.
Enfin bref...

Donc oui dans ton cas il faudra extraire ces champs là.
Même si une solution existe en SQL pur, elle doit être assez tordue.

Le plus simple est effectivement d'extraire le champ:
1/ tu sélectionne tous les enregistrements
2/ tu les passe un par un
3/ si le champ contient un symbole dollar, alors tu extrait chaque valeur numérique (fonction "explode" en PHP par exemple), tu les traites un par un et tu les remet avec la fonction invserse
 
WRInaute passionné
En fait, au vu des réponses ci-dessus, tu as oublié de préciser un élément important :

Cette requête, souhaites-tu l'exécuter au travers d'un fichier php ou pas ?
 
Nouveau WRInaute
wouah: merci de vos nombreuses réponses!!!
effectivement, en attendant vos réponses, j'ai cherché un peu sur le net et comme vous le dites si bien, il semble bien plus judicieux de passer par php et la fonction "explode" .
...une des premières règles qu'on apprend en conception de base de données est qu'un champ représente une valeur atomique...
je l'apprends malheusement à mes dépends et bien trop tard: mon prestataire l'a conçu comme ça :cry:
J'aimerai donc exécuter cette requete au travers d'un fichier php: mais je ne sais pas trop comment faire :oops:
quelqu'un peut-il me mettre sur la voie avec un début de morceau de code? (extraire les données sous forme de table, c'est bon, ça au moins je sais, mais c'est après que ça se corse...)
 
Discussions similaires
Haut