Enlever toutes les fois où apparaissent 4 lettres dans une table

Enlever toutes les fois où apparaissent 4 lettres dans une table - PHP - Programmation

Marsh Posté le 14-08-2003 à 16:06:37    

J'ai une table qui contient plusieurs champs où apparait "_cpm", c'est parfois attaché à quelque chose devant et derrière mais j'ai besoin juste de le supprimer pour qu'un string kikoo_cpm@hotmail.com deviennent kikoo@hotmail.com.
 
Je pense que si on connait la fonction adequate ça doit aller, je vois pas trop comment faire avec "rename", merci d'avance.


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 16:06:37   

Reply

Marsh Posté le 14-08-2003 à 16:09:34    

la encore ...regex .... mais cette fois utilises les regex MySQL  :)


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-08-2003 à 16:11:55    

simogeo a écrit :

la encore ...regex .... mais cette fois utilises les regex MySQL  :)  


 
tu pourrais m'en dire un peu plus ? [:meganne] merci


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 16:12:43    

like sera ton mot clé :jap:

Reply

Marsh Posté le 14-08-2003 à 16:20:25    

une énigme  [:seyed_s]  
 
ce que je vois pas c'est comment dire
 
renomme  xxxYYYxxx en xxxxxxx
 
enfin y'a pas que ça que je vois pas mais c'est surtout ça qui me tracasse


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 16:20:46    

Master_Jul a écrit :


 
tu pourrais m'en dire un peu plus ? [:meganne] merci


pas maintenant .. il faudrait que je me penche dessus ... pas le temps [:chupachupz] ... mais fait des recherches sur le net REGEX Mysql .....  
 
l'idée c'est de faire un update dans ta table de tout les tuples dont les champs contiennent l'expression "_cpm" en la soutirant  :)


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-08-2003 à 16:32:40    

UPDATE matable SET monchamp = REPLACE('monchamp','chaine_from','chaine_to')
 
ça doit passer ça non ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 14-08-2003 à 17:11:06    

Sh@rdar a écrit :

UPDATE matable SET monchamp = REPLACE('monchamp','chaine_from','chaine_to')
 
ça doit passer ça non ?


 
ça m'a mis monchamp dans toutes les lignes de ma table à la colonne monchamp  :(
 
edit : pour 2 trema de trop en fait
 
UPDATE matable SET monchamp = REPLACE('monchamp','chaine_from','chaine_to')
 
maintenant ça marche ! merci beaucoup ! :)


Message édité par Master_Jul le 14-08-2003 à 17:15:22

---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 17:19:12    

aie, je me heurte à un dernier problème, je dois changer le format de temps qui sont du type :
 
 
xx.xxx et qui doivent passer en xx.xx.xxx
 
exemple : 48.489 devient 00.48.489
 
il y a des cas plus compliqué du type 72.132 devient 01.10.123 mais ils peuvent être changé à la main, il n'y en a qu'une dizaine, pas comme les premier où il faudrait juste rajouter
 
00. devant chaque ligne, peut on utiliser un asterix ou équivalent ?
 
replace '*' en '00.*'
 
et encore je sais pas si ça marchera qqch du style


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 17:33:38    

en mysql ou en php ?

Reply

Marsh Posté le 14-08-2003 à 17:33:38   

Reply

Marsh Posté le 14-08-2003 à 17:39:21    

karamilo a écrit :

en mysql ou en php ?


 
n'importe, ça sera fait qu'une fois, si possible en SQL


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 17:42:57    

fonction CONCAT() de mysql;


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-08-2003 à 18:46:06    

c'est plus compliqué que prévu :/  
 
j'ai des fichiers en xx.xxx et d'autres en x.xxx :cry:


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 18:47:52    

alors passes par du php, ca sera plus simple.
tu veux les transformer en quoi les x.xxx ( en 0x.xxx ? ) ?

Reply

Marsh Posté le 14-08-2003 à 18:50:41    

karamilo a écrit :

alors passes par du php, ca sera plus simple.
tu veux les transformer en quoi les x.xxx ( en 0x.xxx ? ) ?


 
les x.xxx deviennent 00.0x.xxx
 
d'un côté, s'ils avaient fait ça dès le début, je n'aurai pas tous ces problèmes, heureusement que karamilo est là  :p  :)


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 18:56:04    

héhé ;)
 
bon tu recup tes données en mysql.

Code :
  1. $search = array(
  2. "#([0-9])\.([0-9]){3}#S",
  3. "#([0-9]){2}\.([0-9]){3}#S" );
  4. $replace = array(
  5. "00.0$1.$2",
  6. "00.$1.$2" );
  7. $tavar = preg_replace($search,$replace,$tavar);


 
l'option S, pour optimiser avec les "array".

Reply

Marsh Posté le 14-08-2003 à 19:23:33    

Je suis désolé mais je ne sais pas comment faire pour me servir de ce bout de code, désolé de faire le boulet mais j'ai du mal. :(
 
J'essayais de faire un select, pis peut être une boucle, et encore ça m'inspire rien. :/


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 19:30:32    

tu te connectes a la base

Code :
  1. $req = "SELECT id,lechampouilyacequetuveux FROM latable";
  2. $res = mysql_query($req);
  3. while ($row = mysql_fetch_array($res))
  4. {
  5. $search = array(
  6. "#([0-9])\.([0-9]){3}#S",
  7. "#([0-9]){2}\.([0-9]){3}#S" );
  8. $replace = array(
  9. "00.0$1.$2",
  10. "00.$1.$2" );
  11. $newvar = preg_replace($search,$replace,$row['lechamp']);
  12. $req2 = "UPDATE latable SET lechamp='$newvar' WHERE id='$row[id]'";
  13. if(mysql_query($req2))
  14. {
  15. $i++;
  16. }
  17. }
  18. echo $i.' enregistrements changés';


 
bon tu remplaces ce que tu veux.  
si c'est trop long, tu decoupes avec un limit a la premiere req.
$i, c'est juste un compteur pour voir si tout est bon :)
 
mais testes avant sur une seule ligne car y'aura peut etre un probleme avec le preg, qu'il remplace ce qui vient deja d'etre remplace ( a => b => c au lieu de a => b tout court )


Message édité par karamilo le 14-08-2003 à 20:33:00
Reply

Marsh Posté le 14-08-2003 à 19:58:45    

parse error sur l accolade qui ferme, l avant dernière   :??:


Message édité par Master_Jul le 14-08-2003 à 19:59:58

---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 19:59:24    

Master_Jul a écrit :

parse error sur l accolade qui ferme, l avant dernière  :heink:  


; putain  :o  
 
et par error apres aussi "";


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-08-2003 à 20:02:33    

simogeo a écrit :


; putain  :o  
 
et par error apres aussi "";


 
j'étais plus sûr qu'on devait metre un ; apres un $x++ il me semblait que j avais fait un script sans, sinon, j avais corrigé un autre petit oubli, essayons


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 20:04:01    

Code :
  1. echo $i.' enregistrements changés
  2. // devient
  3. echo $i.' enregistrements changés';


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-08-2003 à 20:10:11    

simogeo a écrit :

Code :
  1. echo $i.' enregistrements changés
  2. // devient
  3. echo $i.' enregistrements changés';




 
oui, celle là j'ai réglé le pb, ça donne :
 
 

Code :
  1. <?php
  2. include("connect.php3" );
  3. $req = "SELECT id,temps FROM record WHERE id='26'";
  4.   $res = mysql_query($req);
  5.   while ($row = mysql_fetch_array($res))
  6.   {
  7.     $search = array(
  8.     "#([0-9])\.([0-9]){3}#S",
  9.     "#([0-9]){2}\.([0-9]){3}#S" );
  10.     $replace = array(
  11.     "00.0$1.$2",
  12.     "00.$1.$2" );
  13.     $newvar = preg_replace($search,$replace,$row['temps']); 
  14. echo $newvar;
  15.     $req2 = "UPDATE record SET temps='$newvar' WHERE id='$row[id]";
  16.     if(mysql_query($req2))
  17.     {
  18.       $i++;
  19.     }
  20.   }
  21.      echo $i;
  22.       ?>


 
Le echo $newvar; renvoie 00.04.0 et le temps original à cette ligne est 4.960, le echo $i; reste muet lui.


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 20:18:33    

Code :
  1. $req2 = "UPDATE record SET temps='$newvar' WHERE id='$row[id]";


 
fooootes  :o  
 

Code :
  1. $req2 = "UPDATE record SET temps='".$newvar."' WHERE id='".$row[id]."';";


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-08-2003 à 20:32:30    

oula, que de fautes :/
dsl, je devais pas etre bien reveille :(

Reply

Marsh Posté le 14-08-2003 à 20:32:52    

simogeo a écrit :

Code :
  1. $req2 = "UPDATE record SET temps='$newvar' WHERE id='$row[id]";


 
fooootes  :o  
 

Code :
  1. $req2 = "UPDATE record SET temps='".$newvar."' WHERE id='".$row[id]."';";




 
y'a pas un ; en trop là ? :??:


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 20:35:11    

pas forcément, les deux sont possibles et avec un ; c'est mieux.

Reply

Marsh Posté le 14-08-2003 à 20:44:21    

karamilo a écrit :

pas forcément, les deux sont possibles et avec un ; c'est mieux.


 
ok d'accord, sinon y'a toujours un problème avec ce que donne le $newvar, ça transforme  
 
4.896 en 00.04.61  :??:


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 20:55:43    

le problème pourrait pas venir de $1.$2 ? enfin je sais pas trop moi :/


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 14-08-2003 à 21:12:59    

Master_Jul a écrit :

le problème pourrait pas venir de $1.$2 ? enfin je sais pas trop moi :/


ta regex est pourrie .. j'ai pas envie de mettre le nez dedans .. je suis pas specialiste et en plus j'ai pas envide me prendre le chou ce soir  
 
si ja'i bien compris  
tu as des fichiers x.xxx  et des xx.xxx
ca doit devenir doit devenir 00.0x.xxx  ou des 00.xx.xxx
 

Code :
  1. $req = "SELECT id, temps FROM record";
  2. $res = mysql_query($req);
  3. while ($row = mysql_fetch_array($res))
  4. {
  5. if(strlen($row['temps'])==5) $newvar= "00.0".$row['temps'];
  6. elseif(strlen($row['temps'])==6) $newvar= "00.".$row['temps'];
  7. $req2 = "UPDATE record SET temps='$newvar' WHERE id='$row[id]'";
  8. if(mysql_query($req2))
  9. {
  10. $i++;
  11. }
  12. }
  13. echo $i.' enregistrements changés';

 
 
 
essayes ca  ;)


Message édité par simogeo le 14-08-2003 à 21:13:50

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 14-08-2003 à 22:18:00    

Merci simogeo, ça a marché, j'ai juste eu quelques accros sur des demos au format diférent ou déjà transformé mais rien de grave, j'ai corrigé à la main et tout est bon maintenant, encore merci pour tout, merci à karamilo et Sh@rdar qui m'ont permis de rendre le site à nouveau opérationnel.  :hello: Bonne soirée et à la prochaine.


---------------
En français, on écrit "connexion", pas "connection".
Reply

Marsh Posté le 15-08-2003 à 00:03:22    

Sans passer par les expressions régulières, ni le PHP, en partant de cette requête, tu peux faire ce que tu cherches à faire :
 

select text, concat(left(text, INSTR(text,'pass')), right(text, LENGTH(text) - (INSTR(text,'pass') + 4)))  
from label
where text like '%pass%'

Reply

Marsh Posté le 15-08-2003 à 00:05:14    

MagicBuzz a écrit :

Sans passer par les expressions régulières, ni le PHP, en partant de cette requête, tu peux faire ce que tu cherches à faire :
 

select text, concat(left(text, INSTR(text,'pass')), right(text, LENGTH(text) - (INSTR(text,'pass') + 4)))  
from label
where text like '%pass%'




c'est d'abord ce que j'ai proposé ici .. mais il ne savait pas le faire  [:spamafote]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 15-08-2003 à 00:07:20    

Désolé, j'avais pas lu le topic entier :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed