PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 02-09-2009 21:04:30

rickways
Membre
Inscription : 30-08-2009
Messages : 38

Selectionner un nombre dans un champs

Bonjour,

J'ai construit l'une de mes tables mysql n'importe comment et j'aimerais récupérer des données pour l'améliorer.

Disons que j'ai 2 champs:
- idpoeme : qui est vide pour le moment
- nom: qui contient des valeurs de ce type: prisonRICKWAYS1341, abandonJUNI24, soleilLULULEFOU342

EST-IL POSSIBLE de récupérer les valeurs numériques 1341, 24, et 342 pour ces trois cas et les insérer dans le champs idpoeme ?

merci d'avance pour votre aide (j'ai 13000 enregistrements que je ne voudrais pas refaire à la main)

ERIC

Hors ligne

#2 02-09-2009 21:28:15

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Selectionner un nombre dans un champs

Saluton,

rickways a écrit :

EST-IL POSSIBLE de récupérer les valeurs numériques 1341, 24, et 342 pour ces trois cas et les insérer dans le champs idpoeme ?

Oui


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 02-09-2009 21:31:47

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Selectionner un nombre dans un champs

UPDATE nomdelatable SET idpoeme = REVERSE(REVERSE(nom)*1)*1

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 02-09-2009 22:47:56

rickways
Membre
Inscription : 30-08-2009
Messages : 38

Re : Selectionner un nombre dans un champs

Bonjour KRIS,

merci encore une fois pour cette superbe réponse, qui marche à la perfection...

Par contre, j'ai plongé dans le manuel mysql et je n'arrive pas à comprendre ta formule, alors si tu as quelques seconde pour la détailler pour les imbéciles comme moi, cela serait magique.


EN FAIT JE VAIS ESSAYER D'EXPLIQUER ET TU ME DIS:

REVERSE permet au chiffre de la fin de revenir au début, ce qui donne un nombre suivit de lettre, en multipliant cela par 1 on supprime toutes les lettres, il reste donc le nombre à l'envers que l'on remet à l'envers une nouvelle fois en le multipliant par 1.

Si c'est cela,
est-il nécessaire de mettre le dernier *1 ?
cela marcherait-il si le nombre se situait au milieu ?

Encore merci, et si tu n'as pas le temps, comme d'habitude, pas la peine de répondre c'est déjà beaucoup

ERIC

Hors ligne

#5 03-09-2009 05:35:30

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Selectionner un nombre dans un champs

rickways a écrit :

EN FAIT JE VAIS ESSAYER D'EXPLIQUER ET TU ME DIS:

REVERSE permet au chiffre de la fin de revenir au début, ce qui donne un nombre suivit de lettre, en multipliant cela par 1 on supprime toutes les lettres, il reste donc le nombre à l'envers que l'on remet à l'envers une nouvelle fois en le multipliant par 1.

Si c'est cela,
est-il nécessaire de mettre le dernier *1 ?

Non, mais j'ai l'habitude que mes identifiants soient INTEGER UNSIGNED alors j'ai supposé que c'était le cas de idpoeme. Si c'est le cas je pense que cette petite opération évite à MySQL de retransformer la valeur avant de l'intégrer dans la colonne.
Mais, honnêtement je ne sais pas si c'est plus rapide, c'est juste une habitude de vieux porgrammeur dans des environnements moins laxistes quant au typage des données.

rickways a écrit :

cela marcherait-il si le nombre se situait au milieu ?

Evidemment non, dans ce cas MySQL n'offrirait rien de simple dans sa palette de fonctions natives et il faudrait en passer par une procédure stockée dans un langage accepté par MySQL (C par exemple), ce que n'autorise pas tous les hébergeurs.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 03-09-2009 14:50:31

rickways
Membre
Inscription : 30-08-2009
Messages : 38

Re : Selectionner un nombre dans un champs

Merci pour ces explications un peu complexes mais qui aideront peut-être d'autres lecteurs.

J'ai remarqué une limite à cette opération:

Tous les nombres se terminant par 0 perdent leurs 0

Exemple: prisonRICKWAYS1340 ne donnera pas 1340 mais 134 !!!!

Est-ce normal ????

Hors ligne

#7 03-09-2009 16:04:56

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Selectionner un nombre dans un champs

Oui c'est normal et il faut, bien évidemment, y remédier malheureusement je ne vois pas trop comment là, tout de suite. Je vais regarder du côté de ZEROFILL, mais je ne crois pas qu'on puisse forcer un format de nombre avec ça.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#8 03-09-2009 16:58:27

rickways
Membre
Inscription : 30-08-2009
Messages : 38

Re : Selectionner un nombre dans un champs

Merci Kris, ce n'est pas grave si tu ne trouve pas, ça réduit mon travail de 90%
Je n'ai plus que 10% des comm à effectuer à la main c'est déjà bien (1200 comm restants)

Merci en tous cas.

ERIC

Hors ligne

#9 03-09-2009 18:13:06

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Selectionner un nombre dans un champs

Si tu peux faire un truc de ce genre

   1.
      UPDATE nomdelatable SET idpoeme = REVERSE(REVERSE(nom)*1)*IF(RIGHT(nom,3)='000',1000,
IF(RIGHT(nom,2)='00',100,IF(RIGHT(nom,1)='0',10,1)))

ça devrait couvrir déjà pas mal de cas


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#10 03-09-2009 20:24:00

rickways
Membre
Inscription : 30-08-2009
Messages : 38

Re : Selectionner un nombre dans un champs

Alors là c'est le top, merci, je pense que tout est ok !

Hors ligne

#11 04-09-2009 06:18:59

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Selectionner un nombre dans un champs

En fait, mon jeune disciple, Axel, lors de notre séance d'hier soir, m'a subtilement orienté vers une solution beaucoup plus générique, qui consiste à enfermer les éventuels zéros finaux pour les libérer élégamment à la fin. La voici:

UPDATE nomdelatable SET idpoeme = FLOOR(REVERSE(REVERSE(CONCAT(nom,'1')*1))/10)

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums