Regroupement de données dans un champs SQL

Petit nouveau ! | 1 Messages

24 mars 2011, 16:45

Bonjour à tous,

Je bloque sur un traitement sql et j'aimerai avoir votre aide.

Je m'explique:
J'ai dans une table 1 champ regroupant un ensemble d'id et de poids, séparé par un ";" eux mêmes séparés d'autres ID par un "|".

EX : 521;0.5|522;0.5|523;1|524;4|525;0.5|521;2
Où 521 = un id
et 0.5 = le poids de l'id
J'ai donc dans cet exemple 6 entrées pour 5 produits différents (le 521, 522, 523, 524, 525).

Ce que j'aimerai faire, c'est regrouper les différents ID et calculer un poids unique en additionnant les différentes valeurs.

L'objectif est donc d'obtenir cela :
521;2.5|522;0.5|523;1|524;4|525;0.5
Avez vous une idée ?

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 mars 2011, 21:41

salut,

il faudrait, en php utiliser explode pour séparer toutes les valeurs et ensuite en parcourant le tableau résultat faire le calcul pour recréer la chaîne.


Par contre, bien que je connaisse pas l'application complète, je pense que ce type de "stockage" d'info est un problème de conception de l'appli ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 92 Messages

25 mars 2011, 18:04

+1 moogli
La dernière fois que j'ai rencontré ce genre de champs il y a eu aveu de "fainéantise de créer une autre table pour stocker que ça" de la part du précédent développeur.
Surtout si ça fait référence à un produit avec un Id, pourquoi pas stocker la valeur du poids directement dans la table qui enregistre les produits ? Si tu fais ça tu pourras utiliser les fonctions d’agrégation de MySQL et le laisser faire les sommes à ta place.

Je sais aussi que des fois c'est juste pas possible de faire autrement :D
Programmer c'est 20% de syntaxe pour 80% de réflexion et dans les 20% de syntaxe il faut encore compter une bonne dose de réflexion...
Je vous donne des conseils, pas des solutions toutes faites...

zied86
Invité n'ayant pas de compte PHPfrance

02 avr. 2011, 00:42

Bonjour,
vous pouvez utiliser cette requete select id,SUM(poids) from table group by id