8723 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un champ dans une table qui contient ceci :
+---------------------+
| detail              |
+---------------------+
| p1=v1,p2=v2,p3=v3,  |
| p4=v4,p5=v5,p6=v6   |
+---------------------+

Et j'aimerais avoir dans une nouvelle ceci :
+------------------+
| p	|	v	  |
+------------------+
| p1	|	v1	|
| p2	|	v2	|
| p3	|	v3	|
| p4	|	v4	|
| p5	|	v5	|
| p6	|	v6	|
+------------------+

Remarque: dans mon exemple, je vais jusque 6 mais en réalité, ca va de 1 à 25...
Modifié par Alphonse (08 Jul 2011 - 14:27)
En MySQL je sais pas trop, mais tu peux le faire en PHP sur le résultat si c'est le langage que tu utilises.


$array = explode(',' , $var);

foreach ($array as $v) {
 $a = explode('=', $v);
 echo $a[0];
 echo $a[1];
}
Malheureusement, c'est bien en MySQL qu'il faut que je le fasse car je dois le faire sur une table qui contient un peu moins de 8.000.000 d'enregistrements.
Ceci devrait te donner séparément p et v

SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX( `detail` , ',', 1 ),'=',1) as p,
SUBSTRING_INDEX(SUBSTRING_INDEX( `detail` , ',', 1 ),'=',-1) as v
FROM log_table

(ou pas... je fais des test)

Hum l'idée serait d’incrémenter le premier 1 pour p et v mais quand je l’incrémente j'obtiens bien le bon v mais le p reste à p1...
Déjà ça te mets sur une voie.
Modifié par Su4p (08 Jul 2011 - 15:41)
Merci mais un détail peut valoir tout ça : "p1=v1,p2=v2,p3=v3,p4=v4,p5=v5,p6=v6"

Du coup, ta requête me retourne uniquement p1 et v1.
En fait j'ai mis p1 pour "paramètre 1" qui peut valoir n'importe quoi. Et v1 correspond à la valeur du paramètre 1 mais lui aussi peut valoir n'importe quoi.
Bien vu ! Ca devait être l'objet de ma 2ème question Smiley cligne une fois la première résolue.

En fait "p1" ne contiendra jamais de ',' ou de '='.
Par contre "v1" peut contenir des virgules ou des symboles d'égalité !

En PHP, j'ai contourné ce problème de cette manière :
$pattern = "/,([^,]+=)/";
$replacement = "|---WQKYXZ---|\\1";
$str_out = preg_replace($pattern, $replacement, $valeur);
Hum et si tu récupérais tes valeurs en php pour les injecter dans une nouvelle table ? Parce que en SQL ça va être coton ...

Php est tout indiqué pour transformer ta valeur de champ en tableau.
En effet... Je posais tout de même la question sur le forum au cas où quelqu'un aurait su m'aider. Mais étant donné qu'il n'existe pas de fonction du genre SPLIT sous MySQL, ça complique les choses.
Il faut toujours utiliser le bon outil informatique, en php tu en a à tout casser pour une heure ou deux pour peaufiner ton algo ( je prévois toujours large ... ) alors qu'en mysql ... je suis même pas sûre que c'est faisable.