CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[php] Question regex et Bdd

Ez-Toni
Ez-Toni
Niveau 10
28 octobre 2006 à 16:23:47

Salut :ok:

bon je vous explique vite fait, j´ai une base de données contenant une série de produits pour une boutique automobile.
Cependant j´ai fais une erreur lors de l´insertion, j´ai ecris "filtration" pour chaques filtres à air (désolé pour les non adeptes de mecanique auto ^^)

Ce que j´aimerais faire c´est donc remplacer (update) pour chaque produit de la bdd, le mot "filtration" par la chaine de caracteres "filtre à air"

Bon j´ai donc pensé faire un fichier php qui liste les produits de la bdd et utiliser mysql_fetch_array + la fonction ereg_replace.

mais j´aimerais savoir s´il n´y a pas + simple, peutetre même directement dans phpmyadmin?

merci d´avance :)

Thymotep
Thymotep
Niveau 10
28 octobre 2006 à 16:25:46

La 1ere méthode tu l´as essayé ? car dans phpmyadmin je sait pas si tu peux le faire :-(

darth-bane
darth-bane
Niveau 10
28 octobre 2006 à 16:29:12

Moi je ferais ça directement dans PHP My Admin.
Pour lister les produits qui contiennent le mot ´filtration´ :
SELECT * from nomtable WHERE nomchamp LIKE ´%filtration%´;
Pour le update, je n´ai jamais essayé de remplacer un mot par un autre avec une requête, donc là, comme ça, je ne sais pas trop comment je ferais. Mais ça doit être faisable.

deepblue
deepblue
Niveau 16
28 octobre 2006 à 16:29:56

Je pense que la seule methose et de :
- recuperer tout
- faire ou boucle avent dedans :

  • lecture de l´entrée
  • correction
  • update
Ez-Toni
Ez-Toni
Niveau 10
28 octobre 2006 à 16:31:15

Thymotep je suis en train de faire le fichier php la, c´est pas tres complexe mais comme le dit Darth-Bane je pense qu´il y a + simple que ce que j´ai proposé, j´ai cherché dans phpmyadmin j´ai pas trouvé :(

Ez-Toni
Ez-Toni
Niveau 10
28 octobre 2006 à 16:33:14

deepblue ok :ok: c´est donc le principe du fichier php que je fais.
merci :)

darth-bane
darth-bane
Niveau 10
28 octobre 2006 à 16:37:20

Comme je l´ai dis, ça doit être faisable directement en SQL, mais ça me semble plus simple comme l´a dit deepblue.
Il faudra quand même que je me penche sur le sujet un de ses 4 :ok:

jehuty21
jehuty21
Niveau 10
28 octobre 2006 à 17:01:39

La doc sql, ca existe
UPDATE tatable SET colonne = REPLACE(colonne, ´filtration´, ´filtre à air´)

Ez-Toni
Ez-Toni
Niveau 10
28 octobre 2006 à 17:05:41

arf trop tard jehuty21 j´ai fais mon petit fichier php :lol:

_____________

$resultat = mysql_query("SELECT * ...);

while($recherche = mysql_fetch_array ($resultat))
{
$nom = $recherche[nom];
$nom2 = ereg_replace(´iltration´,´iltres à air´,$nom);
$req = "UPDATE peel_produits SET nom = ´$nom2´ WHERE nom LIKE ´$nom´");

//je crois que le WHERE est inutile mais bon on sa
it jamais ^^.

mysql_query($req);

$i++;

}
echo ´</div><br />´ . $i . ´champs modifiés´;

______

mais merci pour ton post ca me servira surement à l´avenir :ok:

jehuty21
jehuty21
Niveau 10
28 octobre 2006 à 17:14:00

De rien, mais n´empêche que c´est pas génial ton truc :p
Le select *, c´est lourd et inutile ( tu n´as besoin que d´une colonne, et je doute que ta table n´aie qu´une colonne )

tu crée des variables inutile ( $nom2 )
Et le posix, c´est plus lent que les pcre. Dans ce cas, preg_replace() est mieux qu´ereg_replace()

et niveau nombre de requête, ca doit chiffrer s´il y a beauocups de lignes :p

Sans oublier qu´un WHERE colonne LIKE ´$nom´, ca équivaut à WHERE colonne = ´$nom´ et que le like est plus lourd

darth-bane
darth-bane
Niveau 10
28 octobre 2006 à 19:39:40

Je ne connaissais pas la fonction SQL REPLACE(), n´en ayant pas eu besoin jusqu´à présent.

j´avais mis "SELECT *" dans mon exemple car je ne connais pas la structure de sa table.
par contre j´avais précisé LIKE ´%filtration%´ afin de trouver ´filtration´ n´importe où dans la chaîne.
LIKE est probablement lourd, mais je me doute que REPLACE utilise une fonction similaire pour trouver un mot dans une chaîne. REPLACE doit donc prendre au minimum autant de temps que LIKE.

jehuty21
jehuty21
Niveau 10
28 octobre 2006 à 19:45:58

Sauf que je m´adressais à Ez-Toni, m´enfin.

Et pour ce qui est de like/replace, je me demande bien pourquoi tu les compare vu que ces fonctions ne font pas du tout la même chose. C´est comme comparé str_replace() et preg_match() :p

darth-bane
darth-bane
Niveau 10
28 octobre 2006 à 19:54:19

Je ne les compare pas, je compare les 2 méthodes (PHP+MySQL Vs MySQL) et je dis que replace doit utiliser une fonction similaire à like afin de séletionner et modifier les enregistrements dont le champs contient le nom à remplacer. Donc au final, la méthode replace ne doit pas être bien plus rapide que l´autre, c´est tout !

darth-bane
darth-bane
Niveau 10
28 octobre 2006 à 19:55:28

"Sauf que je m´adressais à Ez-Toni, m´enfin."

Je ne m´adressais pas en particulier à toi non plus !

jehuty21
jehuty21
Niveau 10
28 octobre 2006 à 20:03:56

Ah bon, j´ai mal compris alors.

Et si, ma méthode est nettement plus rapide que celle qu´Ez-Toni à exposer car il ramène toutes les données ( ce qui prend déjà un bon moment ), ensuite il fait une boucle pour tout parcourir et à chaque ligne, il fait une requête ( avec un LIKE qui plus est ).
Il fait donc un grand nombre de requête ( chacun étant assez lourde ) et déplace une certaines quantité de données.

darth-bane
darth-bane
Niveau 10
28 octobre 2006 à 20:09:23

Pour la boucle de MAJ, je suis d´accord, en effet !
Mais pour moi, il n´y a qu´une requête avec LIKE.

jehuty21
jehuty21
Niveau 10
28 octobre 2006 à 20:11:09

Regarde l´update dans sa boucle, son where col like(´$nom´)

darth-bane
darth-bane
Niveau 10
28 octobre 2006 à 20:23:44

Tel qu´il l´a fait, c´est clair !
Mais si tu fait ça proprement (dans l´hypothèse où la fonction REPLACE n´existe pas), tu fais :
- une requête (SELECT id, nomProduit FROM tableProduits WHERE nomProduit LIKE ´%filtration%´) pour récupérer les enreg à modifier.
- une boucle ou l´on remplace ´filtration´ par ´filtre à air´ et ou l´on met à jour la BDD par une requête UPDATE.

darth-bane
darth-bane
Niveau 10
28 octobre 2006 à 20:25:30

Pardon, j´ai mal terminé ma phrase :
... par une requête UPDATE grâce à l´Id.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware