update mysql

monbototo
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 10
Inscription: 7 Nov 2006

update mysql

Message le Ven Sep 12, 2008 18:08

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

zeb
WRInaute accro
WRInaute accro
 
Messages: 3277
Inscription: 5 Déc 2004

Message le Ven Sep 12, 2008 18:31

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.

poulpe
WRInaute discret
WRInaute discret
 
Messages: 85
Inscription: 29 Juin 2004

Message le Ven Sep 12, 2008 18:38

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.

FloBaoti
WRInaute impliqué
WRInaute impliqué
 
Messages: 755
Inscription: 30 Avr 2006

Message le Ven Sep 12, 2008 18:57

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


5_legs
WRInaute passionné
WRInaute passionné
 
Messages: 2054
Inscription: 30 Avr 2006

Message le Ven Sep 12, 2008 19:15

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 ?

monbototo
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 10
Inscription: 7 Nov 2006

Message le Ven Sep 12, 2008 23:59

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


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités